diff --git a/client/debug.lua b/client/debug.lua deleted file mode 100644 index 7ecd459..0000000 --- a/client/debug.lua +++ /dev/null @@ -1,3 +0,0 @@ -QBCore.Debug = function(resource, obj, depth) - TriggerServerEvent('QBCore:DebugSomething', resource, obj, depth) -end \ No newline at end of file diff --git a/client/events.lua b/client/events.lua index d506f6f..f9a27a0 100644 --- a/client/events.lua +++ b/client/events.lua @@ -1,135 +1,99 @@ --- QBCore Command Events -RegisterNetEvent('QBCore:Command:TeleportToPlayer') -AddEventHandler('QBCore:Command:TeleportToPlayer', function(coords) - local ped = PlayerPedId() - SetPedCoordsKeepVehicle(ped, coords.x, coords.y, coords.z) +-- Player load and unload handling +-- New method for checking if logged in across all scripts (optional) +-- if LocalPlayer.state['isLoggedIn'] then +RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function() + ShutdownLoadingScreenNui() + LocalPlayer.state:set('isLoggedIn', true, false) + SetCanAttackFriendly(PlayerPedId(), true, false) + NetworkSetFriendlyFireOption(true) end) -RegisterNetEvent('QBCore:Command:TeleportToCoords') -AddEventHandler('QBCore:Command:TeleportToCoords', function(x, y, z) - local ped = PlayerPedId() - SetPedCoordsKeepVehicle(ped, x, y, z) +RegisterNetEvent('QBCore:Client:OnPlayerUnload', function() + LocalPlayer.state:set('isLoggedIn', false, false) end) -RegisterNetEvent('QBCore:Command:SpawnVehicle') -AddEventHandler('QBCore:Command:SpawnVehicle', function(model) - QBCore.Functions.SpawnVehicle(model, function(vehicle) - TaskWarpPedIntoVehicle(PlayerPedId(), vehicle, -1) - TriggerEvent("vehiclekeys:client:SetOwner", GetVehicleNumberPlateText(vehicle)) - end) +-- Teleport Commands + +RegisterNetEvent('QBCore:Command:TeleportToPlayer', function(coords) + local ped = PlayerPedId() + SetPedCoordsKeepVehicle(ped, coords.x, coords.y, coords.z) end) -RegisterNetEvent('QBCore:Command:DeleteVehicle') -AddEventHandler('QBCore:Command:DeleteVehicle', function() - local vehicle = QBCore.Functions.GetClosestVehicle() - if IsPedInAnyVehicle(PlayerPedId()) then vehicle = GetVehiclePedIsIn(PlayerPedId(), false) else vehicle = QBCore.Functions.GetClosestVehicle() end - -- TriggerServerEvent('QBCore:Command:CheckOwnedVehicle', GetVehicleNumberPlateText(vehicle)) - QBCore.Functions.DeleteVehicle(vehicle) +RegisterNetEvent('QBCore:Command:TeleportToCoords', function(x, y, z) + local ped = PlayerPedId() + SetPedCoordsKeepVehicle(ped, x, y, z) end) -RegisterNetEvent('QBCore:Command:Revive') -AddEventHandler('QBCore:Command:Revive', function() - local coords = QBCore.Functions.GetCoords(PlayerPedId()) - NetworkResurrectLocalPlayer(coords.x, coords.y, coords.z+0.2, coords.a, true, false) - SetPlayerInvincible(PlayerPedId(), false) - ClearPedBloodDamage(PlayerPedId()) +RegisterNetEvent('QBCore:Command:GoToMarker', function() + local ped = PlayerPedId() + local blip = GetFirstBlipInfoId(8) + if DoesBlipExist(blip) then + local blipCoords = GetBlipCoords(blip) + for height = 1, 1000 do + SetPedCoordsKeepVehicle(ped, blipCoords.x, blipCoords.y, height + 0.0) + local foundGround, zPos = GetGroundZFor_3dCoord(blipCoords.x, blipCoords.y, height + 0.0) + if foundGround then + SetPedCoordsKeepVehicle(ped, blipCoords.x, blipCoords.y, height + 0.0) + break + end + Wait(0) + end + end end) -RegisterNetEvent('QBCore:Command:GoToMarker') -AddEventHandler('QBCore:Command:GoToMarker', function() - Citizen.CreateThread(function() - local entity = PlayerPedId() - if IsPedInAnyVehicle(entity, false) then - entity = GetVehiclePedIsUsing(entity) - end - local success = false - local blipFound = false - local blipIterator = GetBlipInfoIdIterator() - local blip = GetFirstBlipInfoId(8) +-- Vehicle Commands - while DoesBlipExist(blip) do - if GetBlipInfoIdType(blip) == 4 then - cx, cy, cz = table.unpack(Citizen.InvokeNative(0xFA7C7F0AADF25D09, blip, Citizen.ReturnResultAnyway(), Citizen.ResultAsVector())) --GetBlipInfoIdCoord(blip) - blipFound = true - break - end - blip = GetNextBlipInfoId(blipIterator) - end +RegisterNetEvent('QBCore:Command:SpawnVehicle', function(vehName) + local ped = PlayerPedId() + local hash = GetHashKey(vehName) + if not IsModelInCdimage(hash) then return end + RequestModel(hash) + while not HasModelLoaded(hash) do Wait(10) end + local vehicle = CreateVehicle(hash, GetEntityCoords(ped), GetEntityHeading(ped), true, false) + TaskWarpPedIntoVehicle(ped, vehicle, -1) + SetModelAsNoLongerNeeded(vehicle) + TriggerEvent("vehiclekeys:client:SetOwner", GetVehicleNumberPlateText(vehicle)) +end) - if blipFound then - DoScreenFadeOut(250) - while IsScreenFadedOut() do - Citizen.Wait(250) - end - local groundFound = false - local yaw = GetEntityHeading(entity) - - for i = 0, 1000, 1 do - SetEntityCoordsNoOffset(entity, cx, cy, ToFloat(i), false, false, false) - SetEntityRotation(entity, 0, 0, 0, 0 ,0) - SetEntityHeading(entity, yaw) - SetGameplayCamRelativeHeading(0) - Citizen.Wait(0) - --groundFound = true - if GetGroundZFor_3dCoord(cx, cy, ToFloat(i), cz, false) then --GetGroundZFor3dCoord(cx, cy, i, 0, 0) GetGroundZFor_3dCoord(cx, cy, i) - cz = ToFloat(i) - groundFound = true - break - end - end - if not groundFound then - cz = -300.0 - end - success = true - end - - if success then - SetEntityCoordsNoOffset(entity, cx, cy, cz, false, false, true) - SetGameplayCamRelativeHeading(0) - if IsPedSittingInAnyVehicle(PlayerPedId()) then - if GetPedInVehicleSeat(GetVehiclePedIsUsing(PlayerPedId()), -1) == PlayerPedId() then - SetVehicleOnGroundProperly(GetVehiclePedIsUsing(PlayerPedId())) - end - end - --HideLoadingPromt() - DoScreenFadeIn(250) - end - end) +RegisterNetEvent('QBCore:Command:DeleteVehicle', function() + local ped = PlayerPedId() + local veh = GetVehiclePedIsUsing(ped) + if veh ~= 0 then + SetEntityAsMissionEntity(veh, true, true) + DeleteVehicle(veh) + else + local pcoords = GetEntityCoords(ped) + local vehicles = GetGamePool('CVehicle') + for k, v in pairs(vehicles) do + if #(pcoords - GetEntityCoords(v)) <= 5.0 then + SetEntityAsMissionEntity(v, true, true) + DeleteVehicle(v) + end + end + end end) -- Other stuff -RegisterNetEvent('QBCore:Player:SetPlayerData') -AddEventHandler('QBCore:Player:SetPlayerData', function(val) - QBCore.PlayerData = val + +RegisterNetEvent('QBCore:Player:SetPlayerData', function(val) + QBCore.PlayerData = val end) -RegisterNetEvent('QBCore:Player:UpdatePlayerData') -AddEventHandler('QBCore:Player:UpdatePlayerData', function() - local data = {} - data.position = QBCore.Functions.GetCoords(PlayerPedId()) - TriggerServerEvent('QBCore:UpdatePlayer', data) +RegisterNetEvent('QBCore:Player:UpdatePlayerData', function() + TriggerServerEvent('QBCore:UpdatePlayer') end) -RegisterNetEvent('QBCore:Player:UpdatePlayerPosition') -AddEventHandler('QBCore:Player:UpdatePlayerPosition', function() - local position = QBCore.Functions.GetCoords(PlayerPedId()) - TriggerServerEvent('QBCore:UpdatePlayerPosition', position) +RegisterNetEvent('QBCore:Notify', function(text, type, length) + QBCore.Functions.Notify(text, type, length) end) -RegisterNetEvent('QBCore:Notify') -AddEventHandler('QBCore:Notify', function(text, type, length) - QBCore.Functions.Notify(text, type, length) +RegisterNetEvent('QBCore:Client:TriggerCallback', function(name, ...) + if QBCore.ServerCallbacks[name] then + QBCore.ServerCallbacks[name](...) + QBCore.ServerCallbacks[name] = nil + end end) -RegisterNetEvent('QBCore:Client:TriggerCallback') -- QBCore:Client:TriggerCallback falls under GPL License here: [esxlicense]/LICENSE -AddEventHandler('QBCore:Client:TriggerCallback', function(name, ...) - if QBCore.ServerCallbacks[name] ~= nil then - QBCore.ServerCallbacks[name](...) - QBCore.ServerCallbacks[name] = nil - end -end) - -RegisterNetEvent("QBCore:Client:UseItem") -- QBCore:Client:UseItem falls under GPL License here: [esxlicense]/LICENSE -AddEventHandler('QBCore:Client:UseItem', function(item) - TriggerServerEvent("QBCore:Server:UseItem", item) +RegisterNetEvent('QBCore:Client:UseItem', function(item) + TriggerServerEvent('QBCore:Server:UseItem', item) end) diff --git a/client/functions.lua b/client/functions.lua index 0263f3c..bf4717f 100644 --- a/client/functions.lua +++ b/client/functions.lua @@ -1,15 +1,35 @@ QBCore.Functions = {} QBCore.RequestId = 0 -QBCore.Functions.GetPlayerData = function(cb) -- QBCore.Functions.GetPlayerData() falls under GPL License here: [esxlicense]/LICENSE - if cb ~= nil then +-- Player + +function QBCore.Functions.GetPlayerData(cb) + if cb then cb(QBCore.PlayerData) else return QBCore.PlayerData end end -QBCore.Functions.DrawText = function(x, y, width, height, scale, r, g, b, a, text) +function QBCore.Functions.GetCoords(entity) + local coords = GetEntityCoords(entity, false) + local heading = GetEntityHeading(entity) + return vector4(coords.x, coords.y, coords.z, heading) +end + +function QBCore.Functions.HasItem(item) + QBCore.Functions.TriggerCallback('QBCore:HasItem', function(result) + if result then + return true + end + return false + end, item) + return false +end + +-- Utility + +function QBCore.Functions.DrawText(x, y, width, height, scale, r, g, b, a, text) -- Use local function instead SetTextFont(4) SetTextProportional(0) SetTextScale(scale, scale) @@ -18,17 +38,17 @@ QBCore.Functions.DrawText = function(x, y, width, height, scale, r, g, b, a, tex SetTextEdge(2, 0, 0, 0, 255) SetTextDropShadow() SetTextOutline() - SetTextEntry("STRING") + SetTextEntry('STRING') AddTextComponentString(text) DrawText(x - width/2, y - height/2 + 0.005) end -QBCore.Functions.DrawText3D = function(x, y, z, text) +function QBCore.Functions.DrawText3D(x, y, z, text) -- Use local function instead SetTextScale(0.35, 0.35) SetTextFont(4) SetTextProportional(1) SetTextColour(255, 255, 255, 215) - SetTextEntry("STRING") + SetTextEntry('STRING') SetTextCentre(true) AddTextComponentString(text) SetDrawOrigin(x,y,z, 0) @@ -38,211 +58,22 @@ QBCore.Functions.DrawText3D = function(x, y, z, text) ClearDrawOrigin() end -QBCore.Functions.GetCoords = function(entity) - local coords = GetEntityCoords(entity, false) - local heading = GetEntityHeading(entity) - return { - x = coords.x, - y = coords.y, - z = coords.z, - w = heading - } +function QBCore.Functions.Notify(text, textype, length) + local ttype = textype or 'primary' + local length = length or 5000 + SendNUIMessage({action = 'show', type = ttype, length = length, text = text}) end -QBCore.Functions.SpawnVehicle = function(model, cb, coords, isnetworked) -- QBCore.Functions.SpawnVehicle() falls under GPL License here: [esxlicense]/LICENSE - local model = (type(model)=="number" and model or GetHashKey(model)) - local coords = coords ~= nil and coords or QBCore.Functions.GetCoords(PlayerPedId()) - local isnetworked = isnetworked ~= nil and isnetworked or true - - RequestModel(model) - while not HasModelLoaded(model) do - Citizen.Wait(10) - end - - local veh = CreateVehicle(model, coords.x, coords.y, coords.z, coords.w, isnetworked, false) - local netid = NetworkGetNetworkIdFromEntity(veh) - - SetVehicleHasBeenOwnedByPlayer(veh, true) - SetNetworkIdCanMigrate(netid, true) - SetVehicleNeedsToBeHotwired(veh, false) - SetVehRadioStation(veh, "OFF") - - SetModelAsNoLongerNeeded(model) - - if cb ~= nil then - cb(veh) - end +function QBCore.Debug(resource, obj, depth) + TriggerServerEvent('QBCore:DebugSomething', resource, obj, depth) end -QBCore.Functions.DeleteVehicle = function(vehicle) - SetEntityAsMissionEntity(vehicle, true, true) - DeleteVehicle(vehicle) +function QBCore.Functions.TriggerCallback(name, cb, ...) + QBCore.ServerCallbacks[name] = cb + TriggerServerEvent('QBCore:Server:TriggerCallback', name, ...) end -QBCore.Functions.Notify = function(text, textype, length) - local ttype = textype ~= nil and textype or "primary" - local length = length ~= nil and length or 5000 - SendNUIMessage({ - action = "show", - type = ttype, - length = length, - text = text, - }) -end - -QBCore.Functions.TriggerCallback = function(name, cb, ...) -- QBCore.Functions.TriggerCallback() falls under GPL License here: [esxlicense]/LICENSE - QBCore.ServerCallbacks[name] = cb - TriggerServerEvent("QBCore:Server:TriggerCallback", name, ...) -end - -QBCore.Functions.GetVehicles = function() - local vehiclePool = GetGamePool('CVehicle') - local vehicles = {} - - for i = 1, #vehiclePool, 1 do - table.insert(vehicles, vehiclePool[i]) - end - - return vehicles -end - -QBCore.Functions.GetPeds = function(ignoreList) - local pedPool = GetGamePool('CPed') - local ignoreList = ignoreList or {} - local peds = {} - - for i = 1, #pedPool, 1 do - local found = false - - for j=1, #ignoreList, 1 do - if ignoreList[j] == pedPool[i] then - found = true - end - end - - if not found then - table.insert(peds, pedPool[i]) - end - end - - return peds -end - -QBCore.Functions.GetPlayers = function() -- QBCore.Functions.GetPlayers() falls under GPL License here: [esxlicense]/LICENSE - local players = {} - for _, player in ipairs(GetActivePlayers()) do - local ped = GetPlayerPed(player) - if DoesEntityExist(ped) then - table.insert(players, player) - end - end - return players -end - -QBCore.Functions.GetClosestVehicle = function(coords) - local vehicles = QBCore.Functions.GetVehicles() - local closestDistance = -1 - local closestVehicle = -1 - local coords = coords - - if coords == nil then - local playerPed = PlayerPedId() - coords = GetEntityCoords(playerPed) - end - for i=1, #vehicles, 1 do - local vehicleCoords = GetEntityCoords(vehicles[i]) - local distance = #(vehicleCoords - coords) - - if closestDistance == -1 or closestDistance > distance then - closestVehicle = vehicles[i] - closestDistance = distance - end - end - return closestVehicle -end - -QBCore.Functions.GetClosestPed = function(coords, ignoreList) - local ignoreList = ignoreList or {} - local peds = QBCore.Functions.GetPeds(ignoreList) - local closestDistance = -1 - local closestPed = -1 - - if coords == nil then - coords = GetEntityCoords(PlayerPedId()) - end - - for i=1, #peds, 1 do - local pedCoords = GetEntityCoords(peds[i]) - local distance = #(pedCoords - coords) - - if closestDistance == -1 or closestDistance > distance then - closestPed = peds[i] - closestDistance = distance - end - end - - return closestPed, closestDistance -end - - -QBCore.Functions.GetClosestPlayer = function(coords) - if coords == nil then - coords = GetEntityCoords(PlayerPedId()) - end - - local closestPlayers = QBCore.Functions.GetPlayersFromCoords(coords) - local closestDistance = -1 - local closestPlayer = -1 - - for i=1, #closestPlayers, 1 do - if closestPlayers[i] ~= PlayerId() and closestPlayers[i] ~= -1 then - local pos = GetEntityCoords(GetPlayerPed(closestPlayers[i])) - local distance = #(pos - coords) - - if closestDistance == -1 or closestDistance > distance then - closestPlayer = closestPlayers[i] - closestDistance = distance - end - end - end - - return closestPlayer, closestDistance -end - -QBCore.Functions.GetPlayersFromCoords = function(coords, distance) - local players = QBCore.Functions.GetPlayers() - local closePlayers = {} - - if coords == nil then - coords = GetEntityCoords(PlayerPedId()) - end - if distance == nil then - distance = 5.0 - end - for _, player in pairs(players) do - local target = GetPlayerPed(player) - local targetCoords = GetEntityCoords(target) - local targetdistance = #(targetCoords - coords) - if targetdistance <= distance then - table.insert(closePlayers, player) - end - end - - return closePlayers -end - -QBCore.Functions.HasItem = function(source, cb, item) - local retval = false - QBCore.Functions.TriggerCallback('QBCore:HasItem', function(result) - if result then - retval = true - end - return retval - end, item) - return retval -end - -QBCore.Functions.Progressbar = function(name, label, duration, useWhileDead, canCancel, disableControls, animation, prop, propTwo, onFinish, onCancel) +function QBCore.Functions.Progressbar(name, label, duration, useWhileDead, canCancel, disableControls, animation, prop, propTwo, onFinish, onCancel) exports['progressbar']:Progress({ name = name:lower(), duration = duration, @@ -255,18 +86,116 @@ QBCore.Functions.Progressbar = function(name, label, duration, useWhileDead, can propTwo = propTwo, }, function(cancelled) if not cancelled then - if onFinish ~= nil then + if onFinish then onFinish() end else - if onCancel ~= nil then + if onCancel then onCancel() end end end) end -function Round(value, numDecimalPlaces) +-- Getters + +function QBCore.Functions.GetVehicles() return GetGamePool('CVehicle') end +function QBCore.Functions.GetPeds() return GetGamePool('CPed') end +function QBCore.Functions.GetObjects() return GetGamePool('CObject') end +function QBCore.Functions.GetPlayers() return GetActivePlayers() end + +function QBCore.Functions.GetClosestPlayer(coords) + if coords == nil then + coords = GetEntityCoords(PlayerPedId()) + end + local closestPlayers = QBCore.Functions.GetPlayersFromCoords(coords) + local closestDistance = -1 + local closestPlayer = -1 + for i=1, #closestPlayers, 1 do + if closestPlayers[i] ~= PlayerId() and closestPlayers[i] ~= -1 then + local pos = GetEntityCoords(GetPlayerPed(closestPlayers[i])) + local distance = #(pos - coords) + + if closestDistance == -1 or closestDistance > distance then + closestPlayer = closestPlayers[i] + closestDistance = distance + end + end + end + return closestPlayer, closestDistance +end + +function QBCore.Functions.GetPlayersFromCoords(coords, distance) + local players = QBCore.Functions.GetPlayers() + local coords = coords or GetEntityCoords(PlayerPedId()) + local distance = distance or 5 + local closePlayers = {} + for _, player in pairs(players) do + local target = GetPlayerPed(player) + local targetCoords = GetEntityCoords(target) + local targetdistance = #(targetCoords - coords) + if targetdistance <= distance then + closePlayers[player] = player + end + end + return closePlayers +end + +function QBCore.Functions.GetClosestVehicle() + local ped = PlayerPedId() + local coords = GetEntityCoords(ped) + local vehicles = GetGamePool('CVehicle') + local closestDistance = -1 + local closestVehicle = -1 + for i = 1, #vehicles, 1 do + local vehicleCoords = GetEntityCoords(vehicles[i]) + local distance = #(vehicleCoords - coords) + if closestDistance == -1 or closestDistance > distance then + closestVehicle = vehicles[i] + closestDistance = distance + end + end + return closestVehicle +end + +function QBCore.Functions.GetClosestObject() + local ped = PlayerPedId() + local coords = GetEntityCoords(ped) + local objects = GetGamePool('CObject') + local closestDistance = -1 + local closestObject = -1 + for i = 1, #objects, 1 do + local objectCoords = GetEntityCoords(objects[i]) + local distance = #(objectCoords - coords) + if closestDistance == -1 or closestDistance > distance then + closestObject = objects[i] + closestDistance = distance + end + end + return closestObject +end + +function QBCore.Functions.GetClosestPed() + local ped = PlayerPedId() + local coords = GetEntityCoords(ped) + local peds = GetGamePool('CPed') + local closestDistance = -1 + local closestPed = -1 + for i = 1, #peds, 1 do + local pedCoords = GetEntityCoords(peds[i]) + local distance = #(pedCoords - coords) + + if closestDistance == -1 or closestDistance > distance then + closestPed = peds[i] + closestDistance = distance + end + end + return closestPed +end + +-- Vehicle + +local function Round(value, numDecimalPlaces) if numDecimalPlaces then local power = 10^numDecimalPlaces return math.floor((value * power) + 0.5) / (power) @@ -275,16 +204,38 @@ function Round(value, numDecimalPlaces) end end -function Trim(value) +local function Trim(value) if value then - return (string.gsub(value, "^%s*(.-)%s*$", "%1")) + return (string.gsub(value, '^%s*(.-)%s*$', '%1')) else return nil end end -QBCore.Functions.GetVehicleProperties = function(vehicle) - if DoesEntityExist(vehicle) then +function QBCore.Functions.SpawnVehicle(model, cb, coords, isnetworked) + local model = GetHashKey(model) + local coords = coords or QBCore.Functions.GetCoords(PlayerPedId()) + local isnetworked = isnetworked or true + if not IsModelInCdimage(model) then return end + RequestModel(model) + while not HasModelLoaded(model) do Citizen.Wait(10) end + local veh = CreateVehicle(model, coords.x, coords.y, coords.z, coords.w, isnetworked, false) + local netid = NetworkGetNetworkIdFromEntity(veh) + SetVehicleHasBeenOwnedByPlayer(veh, true) + SetNetworkIdCanMigrate(netid, true) + SetVehicleNeedsToBeHotwired(veh, false) + SetVehRadioStation(veh, 'OFF') + SetModelAsNoLongerNeeded(model) + if cb then cb(veh) end +end + +function QBCore.Functions.DeleteVehicle(vehicle) + SetEntityAsMissionEntity(vehicle, true, true) + DeleteVehicle(vehicle) +end + +function QBCore.Functions.GetVehicleProperties(vehicle) + if DoesEntityExist(vehicle) then local colorPrimary, colorSecondary = GetVehicleColours(vehicle) local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle) local extras = {} @@ -298,40 +249,31 @@ QBCore.Functions.GetVehicleProperties = function(vehicle) return { model = GetEntityModel(vehicle), - plate = Trim(GetVehicleNumberPlateText(vehicle)), plateIndex = GetVehicleNumberPlateTextIndex(vehicle), - bodyHealth = Round(GetVehicleBodyHealth(vehicle), 1), engineHealth = Round(GetVehicleEngineHealth(vehicle), 1), tankHealth = Round(GetVehiclePetrolTankHealth(vehicle), 1), - fuelLevel = Round(GetVehicleFuelLevel(vehicle), 1), dirtLevel = Round(GetVehicleDirtLevel(vehicle), 1), - color1 = colorPrimary, color2 = colorSecondary, - pearlescentColor = pearlescentColor, - interiorColor = GetVehicleInteriorColor(vehicle), - dashboardColor = GetVehicleDashboardColour(vehicle), + interiorColor = GetVehicleInteriorColor(vehicle), + dashboardColor = GetVehicleDashboardColour(vehicle), wheelColor = wheelColor, - wheels = GetVehicleWheelType(vehicle), windowTint = GetVehicleWindowTint(vehicle), xenonColor = GetVehicleXenonLightsColour(vehicle), - neonEnabled = { IsVehicleNeonLightEnabled(vehicle, 0), IsVehicleNeonLightEnabled(vehicle, 1), IsVehicleNeonLightEnabled(vehicle, 2), IsVehicleNeonLightEnabled(vehicle, 3) }, - neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)), extras = extras, tyreSmokeColor = table.pack(GetVehicleTyreSmokeColor(vehicle)), - modSpoilers = GetVehicleMod(vehicle, 0), modFrontBumper = GetVehicleMod(vehicle, 1), modRearBumper = GetVehicleMod(vehicle, 2), @@ -343,23 +285,19 @@ QBCore.Functions.GetVehicleProperties = function(vehicle) modFender = GetVehicleMod(vehicle, 8), modRightFender = GetVehicleMod(vehicle, 9), modRoof = GetVehicleMod(vehicle, 10), - modEngine = GetVehicleMod(vehicle, 11), modBrakes = GetVehicleMod(vehicle, 12), modTransmission = GetVehicleMod(vehicle, 13), modHorns = GetVehicleMod(vehicle, 14), modSuspension = GetVehicleMod(vehicle, 15), modArmor = GetVehicleMod(vehicle, 16), - modTurbo = IsToggleModOn(vehicle, 18), modSmokeEnabled = IsToggleModOn(vehicle, 20), modXenon = IsToggleModOn(vehicle, 22), - modFrontWheels = GetVehicleMod(vehicle, 23), modBackWheels = GetVehicleMod(vehicle, 24), - modCustomTiresF = GetVehicleModVariation(vehicle, 23), - modCustomTiresR = GetVehicleModVariation(vehicle, 24), - + modCustomTiresF = GetVehicleModVariation(vehicle, 23), + modCustomTiresR = GetVehicleModVariation(vehicle, 24), modPlateHolder = GetVehicleMod(vehicle, 25), modVanityPlate = GetVehicleMod(vehicle, 26), modTrimA = GetVehicleMod(vehicle, 27), @@ -389,76 +327,32 @@ QBCore.Functions.GetVehicleProperties = function(vehicle) end end -QBCore.Functions.SetVehicleProperties = function(vehicle, props) - if DoesEntityExist(vehicle) then +function QBCore.Functions.SetVehicleProperties(vehicle, props) + if DoesEntityExist(vehicle) then local colorPrimary, colorSecondary = GetVehicleColours(vehicle) local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle) SetVehicleModKit(vehicle, 0) - - if props.plate ~= nil then - SetVehicleNumberPlateText(vehicle, props.plate) - end - - if props.plateIndex ~= nil then - SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex) - end - - if props.bodyHealth ~= nil then - SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0) - end - - if props.engineHealth ~= nil then - SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0) - end - - if props.fuelLevel ~= nil then - SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0) - end - - if props.dirtLevel ~= nil then - SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0) - end - - if props.color1 ~= nil then - SetVehicleColours(vehicle, props.color1, colorSecondary) - end - - if props.color2 ~= nil then - SetVehicleColours(vehicle, props.color1 or colorPrimary, props.color2) - end - - if props.pearlescentColor ~= nil then - SetVehicleExtraColours(vehicle, props.pearlescentColor, wheelColor) - end - - if props.interiorColor ~= nil then - SetVehicleInteriorColor(vehicle, props.interiorColor) - end - - if props.dashboardColor ~= nil then - SetVehicleDashboardColour(vehicle, props.dashboardColor) - end - - if props.wheelColor ~= nil then - SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor) - end - - if props.wheels ~= nil then - SetVehicleWheelType(vehicle, props.wheels) - end - - if props.windowTint ~= nil then - SetVehicleWindowTint(vehicle, props.windowTint) - end - - if props.neonEnabled ~= nil then + if props.plate then SetVehicleNumberPlateText(vehicle, props.plate) end + if props.plateIndex then SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex) end + if props.bodyHealth then SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0) end + if props.engineHealth then SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0) end + if props.fuelLevel then SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0) end + if props.dirtLevel then SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0) end + if props.color1 then SetVehicleColours(vehicle, props.color1, colorSecondary) end + if props.color2 then SetVehicleColours(vehicle, props.color1 or colorPrimary, props.color2) end + if props.pearlescentColor then SetVehicleExtraColours(vehicle, props.pearlescentColor, wheelColor) end + if props.interiorColor then SetVehicleInteriorColor(vehicle, props.interiorColor) end + if props.dashboardColor then SetVehicleDashboardColour(vehicle, props.dashboardColor) end + if props.wheelColor then SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor) end + if props.wheels then SetVehicleWheelType(vehicle, props.wheels) end + if props.windowTint then SetVehicleWindowTint(vehicle, props.windowTint) end + if props.neonEnabled then SetVehicleNeonLightEnabled(vehicle, 0, props.neonEnabled[1]) SetVehicleNeonLightEnabled(vehicle, 1, props.neonEnabled[2]) SetVehicleNeonLightEnabled(vehicle, 2, props.neonEnabled[3]) SetVehicleNeonLightEnabled(vehicle, 3, props.neonEnabled[4]) end - - if props.extras ~= nil then + if props.extras then for id,enabled in pairs(props.extras) do if enabled then SetVehicleExtra(vehicle, tonumber(id), 0) @@ -467,206 +361,58 @@ QBCore.Functions.SetVehicleProperties = function(vehicle, props) end end end - - if props.neonColor ~= nil then - SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3]) - end - - if props.modSmokeEnabled ~= nil then - ToggleVehicleMod(vehicle, 20, true) - end - - if props.tyreSmokeColor ~= nil then - SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3]) - end - - if props.modSpoilers ~= nil then - SetVehicleMod(vehicle, 0, props.modSpoilers, false) - end - - if props.modFrontBumper ~= nil then - SetVehicleMod(vehicle, 1, props.modFrontBumper, false) - end - - if props.modRearBumper ~= nil then - SetVehicleMod(vehicle, 2, props.modRearBumper, false) - end - - if props.modSideSkirt ~= nil then - SetVehicleMod(vehicle, 3, props.modSideSkirt, false) - end - - if props.modExhaust ~= nil then - SetVehicleMod(vehicle, 4, props.modExhaust, false) - end - - if props.modFrame ~= nil then - SetVehicleMod(vehicle, 5, props.modFrame, false) - end - - if props.modGrille ~= nil then - SetVehicleMod(vehicle, 6, props.modGrille, false) - end - - if props.modHood ~= nil then - SetVehicleMod(vehicle, 7, props.modHood, false) - end - - if props.modFender ~= nil then - SetVehicleMod(vehicle, 8, props.modFender, false) - end - - if props.modRightFender ~= nil then - SetVehicleMod(vehicle, 9, props.modRightFender, false) - end - - if props.modRoof ~= nil then - SetVehicleMod(vehicle, 10, props.modRoof, false) - end - - if props.modEngine ~= nil then - SetVehicleMod(vehicle, 11, props.modEngine, false) - end - - if props.modBrakes ~= nil then - SetVehicleMod(vehicle, 12, props.modBrakes, false) - end - - if props.modTransmission ~= nil then - SetVehicleMod(vehicle, 13, props.modTransmission, false) - end - - if props.modHorns ~= nil then - SetVehicleMod(vehicle, 14, props.modHorns, false) - end - - if props.modSuspension ~= nil then - SetVehicleMod(vehicle, 15, props.modSuspension, false) - end - - if props.modArmor ~= nil then - SetVehicleMod(vehicle, 16, props.modArmor, false) - end - - if props.modTurbo ~= nil then - ToggleVehicleMod(vehicle, 18, props.modTurbo) - end - - if props.modXenon ~= nil then - ToggleVehicleMod(vehicle, 22, props.modXenon) - end - - if props.xenonColor ~= nil then - SetVehicleXenonLightsColor(vehicle, props.xenonColor) - end - - if props.modFrontWheels ~= nil then - SetVehicleMod(vehicle, 23, props.modFrontWheels, false) - end - - if props.modBackWheels ~= nil then - SetVehicleMod(vehicle, 24, props.modBackWheels, false) - end - - if props.modCustomTiresF ~= nil then - SetVehicleMod(vehicle, 23, props.modFrontWheels, props.modCustomTiresF) - end - - if props.modCustomTiresR ~= nil then - SetVehicleMod(vehicle, 24, props.modBackWheels, props.modCustomTiresR) - end - - if props.modPlateHolder ~= nil then - SetVehicleMod(vehicle, 25, props.modPlateHolder, false) - end - - if props.modVanityPlate ~= nil then - SetVehicleMod(vehicle, 26, props.modVanityPlate, false) - end - - if props.modTrimA ~= nil then - SetVehicleMod(vehicle, 27, props.modTrimA, false) - end - - if props.modOrnaments ~= nil then - SetVehicleMod(vehicle, 28, props.modOrnaments, false) - end - - if props.modDashboard ~= nil then - SetVehicleMod(vehicle, 29, props.modDashboard, false) - end - - if props.modDial ~= nil then - SetVehicleMod(vehicle, 30, props.modDial, false) - end - - if props.modDoorSpeaker ~= nil then - SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false) - end - - if props.modSeats ~= nil then - SetVehicleMod(vehicle, 32, props.modSeats, false) - end - - if props.modSteeringWheel ~= nil then - SetVehicleMod(vehicle, 33, props.modSteeringWheel, false) - end - - if props.modShifterLeavers ~= nil then - SetVehicleMod(vehicle, 34, props.modShifterLeavers, false) - end - - if props.modAPlate ~= nil then - SetVehicleMod(vehicle, 35, props.modAPlate, false) - end - - if props.modSpeakers ~= nil then - SetVehicleMod(vehicle, 36, props.modSpeakers, false) - end - - if props.modTrunk ~= nil then - SetVehicleMod(vehicle, 37, props.modTrunk, false) - end - - if props.modHydrolic ~= nil then - SetVehicleMod(vehicle, 38, props.modHydrolic, false) - end - - if props.modEngineBlock ~= nil then - SetVehicleMod(vehicle, 39, props.modEngineBlock, false) - end - - if props.modAirFilter ~= nil then - SetVehicleMod(vehicle, 40, props.modAirFilter, false) - end - - if props.modStruts ~= nil then - SetVehicleMod(vehicle, 41, props.modStruts, false) - end - - if props.modArchCover ~= nil then - SetVehicleMod(vehicle, 42, props.modArchCover, false) - end - - if props.modAerials ~= nil then - SetVehicleMod(vehicle, 43, props.modAerials, false) - end - - if props.modTrimB ~= nil then - SetVehicleMod(vehicle, 44, props.modTrimB, false) - end - - if props.modTank ~= nil then - SetVehicleMod(vehicle, 45, props.modTank, false) - end - - if props.modWindows ~= nil then - SetVehicleMod(vehicle, 46, props.modWindows, false) - end - - if props.modLivery ~= nil then + if props.neonColor then SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3]) end + if props.modSmokeEnabled then ToggleVehicleMod(vehicle, 20, true) end + if props.tyreSmokeColor then SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3]) end + if props.modSpoilers then SetVehicleMod(vehicle, 0, props.modSpoilers, false) end + if props.modFrontBumper then SetVehicleMod(vehicle, 1, props.modFrontBumper, false) end + if props.modRearBumper then SetVehicleMod(vehicle, 2, props.modRearBumper, false) end + if props.modSideSkirt then SetVehicleMod(vehicle, 3, props.modSideSkirt, false) end + if props.modExhaust then SetVehicleMod(vehicle, 4, props.modExhaust, false) end + if props.modFrame then SetVehicleMod(vehicle, 5, props.modFrame, false) end + if props.modGrille then SetVehicleMod(vehicle, 6, props.modGrille, false) end + if props.modHood then SetVehicleMod(vehicle, 7, props.modHood, false) end + if props.modFender then SetVehicleMod(vehicle, 8, props.modFender, false) end + if props.modRightFender then SetVehicleMod(vehicle, 9, props.modRightFender, false) end + if props.modRoof then SetVehicleMod(vehicle, 10, props.modRoof, false) end + if props.modEngine then SetVehicleMod(vehicle, 11, props.modEngine, false) end + if props.modBrakes then SetVehicleMod(vehicle, 12, props.modBrakes, false) end + if props.modTransmission then SetVehicleMod(vehicle, 13, props.modTransmission, false) end + if props.modHorns then SetVehicleMod(vehicle, 14, props.modHorns, false) end + if props.modSuspension then SetVehicleMod(vehicle, 15, props.modSuspension, false) end + if props.modArmor then SetVehicleMod(vehicle, 16, props.modArmor, false) end + if props.modTurbo then ToggleVehicleMod(vehicle, 18, props.modTurbo) end + if props.modXenon then ToggleVehicleMod(vehicle, 22, props.modXenon) end + if props.xenonColor then SetVehicleXenonLightsColor(vehicle, props.xenonColor) end + if props.modFrontWheels then SetVehicleMod(vehicle, 23, props.modFrontWheels, false) end + if props.modBackWheels then SetVehicleMod(vehicle, 24, props.modBackWheels, false) end + if props.modCustomTiresF then SetVehicleMod(vehicle, 23, props.modFrontWheels, props.modCustomTiresF) end + if props.modCustomTiresR then SetVehicleMod(vehicle, 24, props.modBackWheels, props.modCustomTiresR) end + if props.modPlateHolder then SetVehicleMod(vehicle, 25, props.modPlateHolder, false) end + if props.modVanityPlate then SetVehicleMod(vehicle, 26, props.modVanityPlate, false) end + if props.modTrimA then SetVehicleMod(vehicle, 27, props.modTrimA, false) end + if props.modOrnaments then SetVehicleMod(vehicle, 28, props.modOrnaments, false) end + if props.modDashboard then SetVehicleMod(vehicle, 29, props.modDashboard, false) end + if props.modDial then SetVehicleMod(vehicle, 30, props.modDial, false) end + if props.modDoorSpeaker then SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false) end + if props.modSeats then SetVehicleMod(vehicle, 32, props.modSeats, false) end + if props.modSteeringWheel then SetVehicleMod(vehicle, 33, props.modSteeringWheel, false) end + if props.modShifterLeavers then SetVehicleMod(vehicle, 34, props.modShifterLeavers, false) end + if props.modAPlate then SetVehicleMod(vehicle, 35, props.modAPlate, false) end + if props.modSpeakers then SetVehicleMod(vehicle, 36, props.modSpeakers, false) end + if props.modTrunk then SetVehicleMod(vehicle, 37, props.modTrunk, false) end + if props.modHydrolic then SetVehicleMod(vehicle, 38, props.modHydrolic, false) end + if props.modEngineBlock then SetVehicleMod(vehicle, 39, props.modEngineBlock, false) end + if props.modAirFilter then SetVehicleMod(vehicle, 40, props.modAirFilter, false) end + if props.modStruts then SetVehicleMod(vehicle, 41, props.modStruts, false) end + if props.modArchCover then SetVehicleMod(vehicle, 42, props.modArchCover, false) end + if props.modAerials then SetVehicleMod(vehicle, 43, props.modAerials, false) end + if props.modTrimB then SetVehicleMod(vehicle, 44, props.modTrimB, false) end + if props.modTank then SetVehicleMod(vehicle, 45, props.modTank, false) end + if props.modWindows then SetVehicleMod(vehicle, 46, props.modWindows, false) end + if props.modLivery then SetVehicleMod(vehicle, 48, props.modLivery, false) SetVehicleLivery(vehicle, props.modLivery) end end -end +end \ No newline at end of file diff --git a/client/loops.lua b/client/loops.lua index 8ea69eb..7a3e97d 100644 --- a/client/loops.lua +++ b/client/loops.lua @@ -1,48 +1,23 @@ -Citizen.CreateThread(function() - while true do - Citizen.Wait(7) - if NetworkIsSessionStarted() then - Citizen.Wait(10) - TriggerServerEvent('QBCore:PlayerJoined') - return - end - end +CreateThread(function() + while true do + Wait(0) + if LocalPlayer.state['isLoggedIn'] then + Wait((1000 * 60) * QBCore.Config.UpdateInterval) + TriggerServerEvent('QBCore:UpdatePlayer') + end + end end) -Citizen.CreateThread(function() - while true do - Citizen.Wait(7) - if isLoggedIn then - Citizen.Wait((1000 * 60) * 5) - TriggerEvent("QBCore:Player:UpdatePlayerData") - else - Citizen.Wait(5000) - end - end -end) - -Citizen.CreateThread(function() - while true do - Citizen.Wait(7) - if isLoggedIn then - Citizen.Wait(30000) - TriggerEvent("QBCore:Player:UpdatePlayerPosition") - else - Citizen.Wait(5000) - end - end -end) - -Citizen.CreateThread(function() - while true do - Citizen.Wait(math.random(3000, 5000)) - if isLoggedIn then - if QBCore.Functions.GetPlayerData().metadata["hunger"] <= 0 or QBCore.Functions.GetPlayerData().metadata["thirst"] <= 0 then - local ped = PlayerPedId() - local currentHealth = GetEntityHealth(ped) - - SetEntityHealth(ped, currentHealth - math.random(5, 10)) - end - end - end +CreateThread(function() + while true do + Wait(QBCore.Config.StatusInterval) + if LocalPlayer.state['isLoggedIn'] then + if QBCore.Functions.GetPlayerData().metadata['hunger'] <= 0 or + QBCore.Functions.GetPlayerData().metadata['thirst'] <= 0 then + local ped = PlayerPedId() + local currentHealth = GetEntityHealth(ped) + SetEntityHealth(ped, currentHealth - math.random(5, 10)) + end + end + end end) \ No newline at end of file diff --git a/client/main.lua b/client/main.lua index 67dbb31..095d962 100644 --- a/client/main.lua +++ b/client/main.lua @@ -4,26 +4,10 @@ QBCore.Config = QBConfig QBCore.Shared = QBShared QBCore.ServerCallbacks = {} -isLoggedIn = false - -function GetCoreObject() +exports('GetCoreObject', function() return QBCore -end - -RegisterNetEvent('QBCore:GetObject') -AddEventHandler('QBCore:GetObject', function(cb) - cb(GetCoreObject()) end) -RegisterNetEvent('QBCore:Client:OnPlayerLoaded') -AddEventHandler('QBCore:Client:OnPlayerLoaded', function() - ShutdownLoadingScreenNui() - isLoggedIn = true - SetCanAttackFriendly(PlayerPedId(), true, false) - NetworkSetFriendlyFireOption(true) -end) - -RegisterNetEvent('QBCore:Client:OnPlayerUnload') -AddEventHandler('QBCore:Client:OnPlayerUnload', function() - isLoggedIn = false -end) +-- To use this export in a script instead of manifest method +-- Just put this line of code below at the very top of the script +-- local QBCore = exports['qb-core']:GetCoreObject() \ No newline at end of file diff --git a/config.lua b/config.lua index 2ecfebd..c679db3 100644 --- a/config.lua +++ b/config.lua @@ -2,6 +2,8 @@ QBConfig = {} QBConfig.MaxPlayers = GetConvarInt('sv_maxclients', 64) -- Gets max players from config file, default 32 QBConfig.DefaultSpawn = vector4(-1035.71, -2731.87, 12.86, 0.0) +QBConfig.UpdateInterval = 5 -- how often to update player data in minutes +QBConfig.StatusInterval = 5000 -- how often to check hunger/thirst status in ms QBConfig.Money = {} QBConfig.Money.MoneyTypes = {['cash'] = 500, ['bank'] = 5000, ['crypto'] = 0 } -- ['type']=startamount - Add or remove money types for your server (for ex. ['blackmoney']=0), remember once added it will not be removed from the database! diff --git a/fxmanifest.lua b/fxmanifest.lua index 49c9427..778ad41 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -4,7 +4,7 @@ game 'gta5' description 'QB-Core' version '1.0.0' -shared_scripts { +shared_scripts { 'import.lua', 'config.lua', 'shared.lua' @@ -14,25 +14,19 @@ client_scripts { 'client/main.lua', 'client/functions.lua', 'client/loops.lua', - 'client/events.lua', - 'client/debug.lua' + 'client/events.lua' } server_scripts { 'server/main.lua', 'server/functions.lua', - 'server/loops.lua', 'server/player.lua', 'server/events.lua', 'server/commands.lua', 'server/debug.lua' } -ui_page { - 'html/ui.html' -} - -lua54 'yes' +ui_page 'html/ui.html' files { 'html/ui.html', @@ -43,4 +37,6 @@ files { dependencies { 'progressbar', 'connectqueue' -} \ No newline at end of file +} + +lua54 'yes' \ No newline at end of file diff --git a/import.lua b/import.lua index f8b127b..6f15706 100644 --- a/import.lua +++ b/import.lua @@ -1,4 +1,6 @@ -if GetCurrentResourceName() == 'qb-core' then +-- This might eventually be deprecated for the export system + +if GetCurrentResourceName() == 'qb-core' then function GetSharedObject() return QBCore end @@ -6,4 +8,4 @@ if GetCurrentResourceName() == 'qb-core' then exports('GetSharedObject', GetSharedObject) end -QBCore = exports['qb-core']:GetSharedObject() +QBCore = exports['qb-core']:GetSharedObject() \ No newline at end of file diff --git a/server/commands.lua b/server/commands.lua index 2360e6b..e92c088 100644 --- a/server/commands.lua +++ b/server/commands.lua @@ -1,157 +1,196 @@ QBCore.Commands = {} QBCore.Commands.List = {} -QBCore.Commands.Add = function(name, help, arguments, argsrequired, callback, permission) -- [name] = command name (ex. /givemoney), [help] = help text, [arguments] = arguments that need to be passed (ex. {{name="id", help="ID of a player"}, {name="amount", help="amount of money"}}), [argsrequired] = set arguments required (true or false), [callback] = function(source, args) callback, [permission] = rank or job of a player - QBCore.Commands.List[name:lower()] = { - name = name:lower(), - permission = permission ~= nil and permission:lower() or "user", - help = help, - arguments = arguments, - argsrequired = argsrequired, - callback = callback, - } +-- Register & Refresh Commands + +function QBCore.Commands.Add(name, help, arguments, argsrequired, callback, permission) + if type(permission) == 'string' then + permission = permission:lower() + else + permission = 'user' + end + QBCore.Commands.List[name:lower()] = { + name = name:lower(), + permission = permission, + help = help, + arguments = arguments, + argsrequired = argsrequired, + callback = callback + } end -QBCore.Commands.Refresh = function(source) - local Player = QBCore.Functions.GetPlayer(tonumber(source)) - if Player ~= nil then - for command, info in pairs(QBCore.Commands.List) do - if QBCore.Functions.HasPermission(source, "god") or QBCore.Functions.HasPermission(source, QBCore.Commands.List[command].permission) then - TriggerClientEvent('chat:addSuggestion', source, "/"..command, info.help, info.arguments) - end - end - end +function QBCore.Commands.Refresh(source) + local src = source + local Player = QBCore.Functions.GetPlayer(src) + if Player then + for command, info in pairs(QBCore.Commands.List) do + local isGod = QBCore.Functions.HasPermission(src, 'god') + local hasPerm = QBCore.Functions.HasPermission(src, QBCore.Commands.List[command].permission) + local isPrincipal = IsPrincipalAceAllowed('group.admin', 'command') + if isGod or hasPerm or isPrincipal then + TriggerClientEvent('chat:addSuggestion', src, '/' .. command, info.help, info.arguments) + end + end + end end -QBCore.Commands.Add("tp", "TP To Player or Coords (Admin Only)", {{name="id/x", help="ID of player or X position"}, {name="y", help="Y position"}, {name="z", help="Z position"}}, false, function(source, args) - if (args[1] ~= nil and (args[2] == nil and args[3] == nil)) then - local player = GetPlayerPed(source) - local target = GetPlayerPed(tonumber(args[1])) - if target ~= 0 then - local coords = GetEntityCoords(target) - TriggerClientEvent('QBCore:Command:TeleportToPlayer', source, coords) - else - TriggerClientEvent('QBCore:Notify', source, "Player Not Online", "error") - end - else - if args[1] ~= nil and args[2] ~= nil and args[3] ~= nil then - local player = GetPlayerPed(source) - local x = tonumber(args[1]) - local y = tonumber(args[2]) - local z = tonumber(args[3]) - if (x ~= 0) and (y ~= 0) and (z ~= 0) then - TriggerClientEvent('QBCore:Command:TeleportToCoords', source, x, y, z) - else - TriggerClientEvent('QBCore:Notify', source, "Incorrect Format", "error") - end - else - TriggerClientEvent('QBCore:Notify', source, "Not every argument has been entered (x, y, z)", "error") - end - end -end, "admin") +-- Teleport -QBCore.Commands.Add("addpermission", "Give Player Permissions (God Only)", {{name="id", help="ID of player"}, {name="permission", help="Permission level"}}, true, function(source, args) - local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) - local permission = tostring(args[2]):lower() - if Player ~= nil then - QBCore.Functions.AddPermission(Player.PlayerData.source, permission) - else - TriggerClientEvent('QBCore:Notify', source, "Player Not Online", "error") - end -end, "god") +QBCore.Commands.Add('tp', 'TP To Player or Coords (Admin Only)', {{name = 'id/x', help = 'ID of player or X position'},{name = 'y', help = 'Y position'}, {name = 'z', help = 'Z position'}}, false, function(source, args) + local src = source + if args[1] and not args[2] and not args[3] then + local target = GetPlayerPed(tonumber(args[1])) + if target ~= 0 then + local coords = GetEntityCoords(target) + TriggerClientEvent('QBCore:Command:TeleportToPlayer', src, coords) + else + TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error') + end + else + if args[1] and args[2] and args[3] then + local x = tonumber(args[1]) + local y = tonumber(args[2]) + local z = tonumber(args[3]) + if (x ~= 0) and (y ~= 0) and (z ~= 0) then + TriggerClientEvent('QBCore:Command:TeleportToCoords', src, x, y, z) + else + TriggerClientEvent('QBCore:Notify', src, 'Incorrect Format', 'error') + end + else + TriggerClientEvent('QBCore:Notify', src, 'Not every argument has been entered (x, y, z)', 'error') + end + end +end, 'admin') -QBCore.Commands.Add("removepermission", "Remove Players Permissions (God Only)", {{name="id", help="ID of player"}}, true, function(source, args) - local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) - if Player ~= nil then - QBCore.Functions.RemovePermission(Player.PlayerData.source) - else - TriggerClientEvent('QBCore:Notify', source, "Player Not Online", "error") - end -end, "god") +QBCore.Commands.Add('tpm', 'TP To Marker (Admin Only)', {}, false, function(source) + local src = source + TriggerClientEvent('QBCore:Command:GoToMarker', src) +end, 'admin') -QBCore.Commands.Add("car", "Spawn Vehicle (Admin Only)", {{name="model", help="Model name of the vehicle"}}, true, function(source, args) - TriggerClientEvent('QBCore:Command:SpawnVehicle', source, args[1]) -end, "admin") +-- Permissions -QBCore.Commands.Add("dv", "Delete Vehicle (Admin Only)", {}, false, function(source, args) - TriggerClientEvent('QBCore:Command:DeleteVehicle', source) -end, "admin") +QBCore.Commands.Add('addpermission', 'Give Player Permissions (God Only)', {{name = 'id', help = 'ID of player'},{name = 'permission', help = 'Permission level'}}, true, function(source, args) + local src = source + local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) + local permission = tostring(args[2]):lower() + if Player then + QBCore.Functions.AddPermission(Player.PlayerData.source, permission) + else + TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error') + end +end, 'god') -QBCore.Commands.Add("tpm", "TP To Marker (Admin Only)", {}, false, function(source, args) - TriggerClientEvent('QBCore:Command:GoToMarker', source) -end, "admin") +QBCore.Commands.Add('removepermission', 'Remove Players Permissions (God Only)', {{name = 'id', help = 'ID of player'}}, true, function(source, args) + local src = source + local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) + if Player then + QBCore.Functions.RemovePermission(Player.PlayerData.source) + else + TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error') + end +end, 'god') -QBCore.Commands.Add("givemoney", "Give A Player Money (Admin Only)", {{name="id", help="Player ID"},{name="moneytype", help="Type of money (cash, bank, crypto)"}, {name="amount", help="Amount of money"}}, true, function(source, args) - local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) - if Player ~= nil then - Player.Functions.AddMoney(tostring(args[2]), tonumber(args[3])) - else - TriggerClientEvent('QBCore:Notify', source, "Player Not Online", "error") - end -end, "admin") +-- Vehicle -QBCore.Commands.Add("setmoney", "Set Players Money Amount (Admin Only)", {{name="id", help="Player ID"},{name="moneytype", help="Type of money (cash, bank, crypto)"}, {name="amount", help="Amount of money"}}, true, function(source, args) - local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) - if Player ~= nil then - Player.Functions.SetMoney(tostring(args[2]), tonumber(args[3])) - else - TriggerClientEvent('QBCore:Notify', source, "Player Not Online", "error") - end -end, "admin") +QBCore.Commands.Add('car', 'Spawn Vehicle (Admin Only)',{{name = 'model', help = 'Model name of the vehicle'}}, true, function(source, args) + local src = source + TriggerClientEvent('QBCore:Command:SpawnVehicle', src, args[1]) +end, 'admin') -QBCore.Commands.Add("setjob", "Set A Players Job (Admin Only)", {{name="id", help="Player ID"}, {name="job", help="Job name"}, {name="grade", help="Grade"}}, true, function(source, args) - local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) - if Player == nil then - TriggerClientEvent('QBCore:Notify', source, "Player Not Online", "error") - else - Player.Functions.SetJob(tostring(args[2]), tonumber(args[3])) - end -end, "admin") +QBCore.Commands.Add('dv', 'Delete Vehicle (Admin Only)', {}, false, function(source) + local src = source + TriggerClientEvent('QBCore:Command:DeleteVehicle', src) +end, 'admin') -QBCore.Commands.Add("job", "Check Your Job", {}, false, function(source, args) - local PlayerJob = QBCore.Functions.GetPlayer(source).PlayerData.job - TriggerClientEvent('QBCore:Notify', source, string.format("[Job]: %s [Grade]: %s [On Duty]: %s", PlayerJob.label, PlayerJob.grade.name, PlayerJob.onduty)) -end) +-- Money -QBCore.Commands.Add("setgang", "Set A Players Gang (Admin Only)", {{name="id", help="Player ID"}, {name="gang", help="Name of a gang"}, {name="grade", help="Grade"}}, true, function(source, args) - local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) - if Player == nil then - TriggerClientEvent('QBCore:Notify', source, "Player Not Online", "error") - else - Player.Functions.SetGang(tostring(args[2]), tonumber(args[3])) - end -end, "admin") +QBCore.Commands.Add('givemoney', 'Give A Player Money (Admin Only)', {{name = 'id', help = 'Player ID'},{name = 'moneytype', help = 'Type of money (cash, bank, crypto)'},{name = 'amount', help = 'Amount of money'}}, true, function(source, args) + local src = source + local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) + if Player then + Player.Functions.AddMoney(tostring(args[2]), tonumber(args[3])) + else + TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error') + end +end, 'admin') -QBCore.Commands.Add("gang", "Check Your Gang", {}, false, function(source, args) - local PlayerGang = QBCore.Functions.GetPlayer(source).PlayerData.gang - TriggerClientEvent('QBCore:Notify', source, string.format("[Gang]: %s [Grade]: %s", PlayerGang.label, PlayerGang.grade.name)) -end) +QBCore.Commands.Add('setmoney', 'Set Players Money Amount (Admin Only)', {{name = 'id', help = 'Player ID'},{name = 'moneytype', help = 'Type of money (cash, bank, crypto)'},{name = 'amount', help = 'Amount of money'}}, true, function(source, args) + local src = source + local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) + if Player then + Player.Functions.SetMoney(tostring(args[2]), tonumber(args[3])) + else + TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error') + end +end, 'admin') -QBCore.Commands.Add("clearinv", "Clear Players Inventory (Admin Only)", {{name="id", help="Player ID"}}, false, function(source, args) - local playerId = args[1] ~= nil and args[1] or source - local Player = QBCore.Functions.GetPlayer(tonumber(playerId)) - if Player ~= nil then - Player.Functions.ClearInventory() - else - TriggerClientEvent('QBCore:Notify', source, "Player Not Online", "error") - end -end, "admin") +-- Job -QBCore.Commands.Add("ooc", "OOC Chat Message", {}, false, function(source, args) - local message = table.concat(args, " ") - local Players = QBCore.Functions.GetPlayers() - local Player = QBCore.Functions.GetPlayer(source) +QBCore.Commands.Add('job', 'Check Your Job', {}, false, function(source) + local src = source + local PlayerJob = QBCore.Functions.GetPlayer(src).PlayerData.job + TriggerClientEvent('QBCore:Notify', src, string.format('[Job]: %s [Grade]: %s [On Duty]: %s', PlayerJob.label, PlayerJob.grade.name, PlayerJob.onduty)) +end, 'user') - for k, v in pairs(QBCore.Functions.GetPlayers()) do - if v == source then - TriggerClientEvent('chatMessage', v, "OOC " .. GetPlayerName(source), "normal", message) - elseif #(GetEntityCoords(GetPlayerPed(source)) - GetEntityCoords(GetPlayerPed(v))) < 20.0 then - TriggerClientEvent('chatMessage', v, "OOC " .. GetPlayerName(source), "normal", message) - elseif QBCore.Functions.HasPermission(v, "admin") then - if QBCore.Functions.IsOptin(v) then - TriggerClientEvent('chatMessage', v, "Proximity OOC " .. GetPlayerName(source), "normal", message) - TriggerEvent("qb-log:server:CreateLog", "ooc", "OOC", "white", "**"..GetPlayerName(source).."** (CitizenID: "..Player.PlayerData.citizenid.." | ID: "..source..") **Message:** " ..message, false) - end - end - end -end) +QBCore.Commands.Add('setjob', 'Set A Players Job (Admin Only)', {{name = 'id', help = 'Player ID'}, {name = 'job', help = 'Job name'},{name = 'grade', help = 'Grade'}}, true, function(source, args) + local src = source + local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) + if Player then + Player.Functions.SetJob(tostring(args[2]), tonumber(args[3])) + else + TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error') + end +end, 'admin') + +-- Gang + +QBCore.Commands.Add('gang', 'Check Your Gang', {}, false, function(source) + local src = source + local PlayerGang = QBCore.Functions.GetPlayer(source).PlayerData.gang + TriggerClientEvent('QBCore:Notify', src, string.format('[Gang]: %s [Grade]: %s', PlayerGang.label, PlayerGang.grade.name)) +end, 'user') + +QBCore.Commands.Add('setgang', 'Set A Players Gang (Admin Only)', {{name = 'id', help = 'Player ID'}, {name = 'gang', help = 'Name of a gang'},{name = 'grade', help = 'Grade'}}, true, function(source, args) + local src = source + local Player = QBCore.Functions.GetPlayer(tonumber(args[1])) + if Player then + Player.Functions.SetGang(tostring(args[2]), tonumber(args[3])) + else + TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error') + end +end, 'admin') + +-- Inventory (should be in qb-inventory?) + +QBCore.Commands.Add('clearinv', 'Clear Players Inventory (Admin Only)',{{name = 'id', help = 'Player ID'}}, false, function(source, args) + local src = source + local playerId = args[1] or src + local Player = QBCore.Functions.GetPlayer(tonumber(playerId)) + if Player then + Player.Functions.ClearInventory() + else + TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error') + end +end, 'admin') + +-- Out of Character Chat + +QBCore.Commands.Add('ooc', 'OOC Chat Message', {}, false, function(source, args) + local src = source + local message = table.concat(args, ' ') + local Players = QBCore.Functions.GetPlayers() + local Player = QBCore.Functions.GetPlayer(src) + for k, v in pairs(Players) do + if v == src then + TriggerClientEvent('chat:addMessage', v, 'OOC ' .. GetPlayerName(src), 'normal', message) + elseif #(GetEntityCoords(GetPlayerPed(src)) - + GetEntityCoords(GetPlayerPed(v))) < 20.0 then + TriggerClientEvent('chat:addMessage', v, 'OOC ' .. GetPlayerName(src), 'normal', message) + elseif QBCore.Functions.HasPermission(v, 'admin') then + if QBCore.Functions.IsOptin(v) then + TriggerClientEvent('chat:addMessage', v, 'Proximity OOC ' .. GetPlayerName(src), 'normal', message) + TriggerEvent('qb-log:server:CreateLog', 'ooc', 'OOC', 'white', '**' .. GetPlayerName(src) .. '** (CitizenID: ' ..Player.PlayerData.citizenid .. ' | ID: ' .. src ..') **Message:** ' .. message, false) + end + end + end +end, 'user') \ No newline at end of file diff --git a/server/debug.lua b/server/debug.lua index 26ac4f4..e069a34 100644 --- a/server/debug.lua +++ b/server/debug.lua @@ -1,36 +1,34 @@ -RegisterServerEvent('QBCore:DebugSomething') -AddEventHandler('QBCore:DebugSomething', function(resource, obj, depth) - print("\x1b[4m\x1b[36m["..resource..":DEBUG]\x1b[0m") - if type(obj) == "string" then - print(string.format("%q", obj)) - elseif type(obj) == "table" then - local str = "{" +RegisterServerEvent('QBCore:DebugSomething', function(resource, obj, depth) + print('\x1b[4m\x1b[36m[' .. resource .. ':DEBUG]\x1b[0m') + if type(obj) == 'string' then + print(string.format('%q', obj)) + elseif type(obj) == 'table' then + local str = '{' for k, v in pairs(obj) do - if type(v) == "table" then + if type(v) == 'table' then for ik, iv in pairs(v) do - str = str.."\n["..k.."] -> ["..ik.."] -> "..tostring(iv) + str = str .. '\n[' .. k .. '] -> [' .. ik .. '] -> ' .. tostring(iv) end else - str = str.."\n["..k.."] -> "..tostring(v) + str = str .. '\n[' .. k .. '] -> ' .. tostring(v) end end - - print(str.."\n}") + print(str .. '\n}') else local success, value = pcall(function() return tostring(obj) end) - print((success and value or "")) + print((success and value or '')) end - print("\x1b[4m\x1b[36mEND OF DEBUG\x1b[0m") + print('\x1b[4m\x1b[36mEND OF DEBUG\x1b[0m') end) -QBCore.Debug = function(resource, obj, depth) +function QBCore.Debug(resource, obj, depth) TriggerEvent('QBCore:DebugSomething', resource, obj, depth) end -QBCore.ShowError = function(resource, msg) - print("\x1b[31m["..resource..":ERROR]\x1b[0m "..msg) +function QBCore.ShowError(resource, msg) + print('\x1b[31m[' .. resource .. ':ERROR]\x1b[0m ' .. msg) end -QBCore.ShowSuccess = function(resource, msg) - print("\x1b[32m["..resource..":LOG]\x1b[0m "..msg) -end +function QBCore.ShowSuccess(resource, msg) + print('\x1b[32m[' .. resource .. ':LOG]\x1b[0m ' .. msg) +end \ No newline at end of file diff --git a/server/events.lua b/server/events.lua index 7141034..91a21a9 100644 --- a/server/events.lua +++ b/server/events.lua @@ -1,20 +1,44 @@ --- Player joined -RegisterServerEvent("QBCore:PlayerJoined") -AddEventHandler('QBCore:PlayerJoined', function() - local src = source - SetPlayerRoutingBucket(src, 0) -end) +-- Event Handler -AddEventHandler('playerDropped', function(reason) +AddEventHandler('playerDropped', function() local src = source if QBCore.Players[src] then local Player = QBCore.Players[src] - TriggerEvent("qb-log:server:CreateLog", "joinleave", "Dropped", "red", "**".. GetPlayerName(src) .. "** ("..Player.PlayerData.license..") left..") + TriggerEvent('qb-log:server:CreateLog', 'joinleave', 'Dropped', 'red', '**'.. GetPlayerName(src) .. '** ('..Player.PlayerData.license..') left..') Player.Functions.Save() QBCore.Players[src] = nil end end) +AddEventHandler('chatMessage', function(source, n, message) + local src = source + if string.sub(message, 1, 1) == '/' then + local args = QBCore.Shared.SplitStr(message, ' ') + local command = string.gsub(args[1]:lower(), '/', '') + CancelEvent() + if QBCore.Commands.List[command] then + local Player = QBCore.Functions.GetPlayer(src) + if Player then + local isGod = QBCore.Functions.HasPermission(src, 'god') + local hasPerm = QBCore.Functions.HasPermission(src, QBCore.Commands.List[command].permission) + local isPrincipal = IsPrincipalAceAllowed('group.admin', 'command') + table.remove(args, 1) + if isGod or hasPerm or isPrincipal then + if (QBCore.Commands.List[command].argsrequired and #QBCore.Commands.List[command].arguments ~= 0 and args[#QBCore.Commands.List[command].arguments] == nil) then + TriggerClientEvent('QBCore:Notify', src, 'All arguments must be filled out!', 'error') + else + QBCore.Commands.List[command].callback(src, args) + end + else + TriggerClientEvent('QBCore:Notify', src, 'No Access To This Command', 'error') + end + end + end + end +end) + +-- Player Connecting + local function OnPlayerConnecting(name, setKickReason, deferrals) local player = source local license @@ -24,7 +48,7 @@ local function OnPlayerConnecting(name, setKickReason, deferrals) -- mandatory wait! Wait(0) - deferrals.update(string.format("Hello %s. Validating Your Rockstar License", name)) + deferrals.update(string.format('Hello %s. Validating Your Rockstar License', name)) for _, v in pairs(identifiers) do if string.find(v, 'license') then @@ -36,14 +60,14 @@ local function OnPlayerConnecting(name, setKickReason, deferrals) -- mandatory wait! Wait(2500) - deferrals.update(string.format("Hello %s. We are checking if you are banned.", name)) - + deferrals.update(string.format('Hello %s. We are checking if you are banned.', name)) + local isBanned, Reason = QBCore.Functions.IsPlayerBanned(player) local isLicenseAlreadyInUse = QBCore.Functions.IsLicenseInUse(license) - + Wait(2500) - - deferrals.update(string.format("Welcome %s to {Server Name}.", name)) + + deferrals.update(string.format('Welcome %s to {Server Name}.', name)) if not license then deferrals.done('No Valid Rockstar License Found') @@ -54,212 +78,156 @@ local function OnPlayerConnecting(name, setKickReason, deferrals) else deferrals.done() Wait(1000) - TriggerEvent("connectqueue:playerConnect", name, setKickReason, deferrals) + TriggerEvent('connectqueue:playerConnect', name, setKickReason, deferrals) end --Add any additional defferals you may need! end -AddEventHandler("playerConnecting", OnPlayerConnecting) +AddEventHandler('playerConnecting', OnPlayerConnecting) -RegisterServerEvent("QBCore:server:CloseServer") -AddEventHandler('QBCore:server:CloseServer', function(reason) - local src = source - local Player = QBCore.Functions.GetPlayer(src) +-- Open & Close Server (prevents players from joining) - if QBCore.Functions.HasPermission(source, "admin") or QBCore.Functions.HasPermission(source, "god") then - local reason = reason ~= nil and reason or "No reason specified..." +RegisterNetEvent('QBCore:server:CloseServer', function(reason) + local src = source + if QBCore.Functions.HasPermission(src, 'admin') or QBCore.Functions.HasPermission(src, 'god') then + local reason = reason or 'No reason specified' QBCore.Config.Server.closed = true QBCore.Config.Server.closedReason = reason - TriggerClientEvent("qbadmin:client:SetServerStatus", -1, true) + TriggerClientEvent('qbadmin:client:SetServerStatus', -1, true) else - QBCore.Functions.Kick(src, "You don't have permissions for this..", nil, nil) + QBCore.Functions.Kick(src, 'You don\'t have permissions for this..', nil, nil) end end) -RegisterServerEvent("QBCore:server:OpenServer") -AddEventHandler('QBCore:server:OpenServer', function() - local src = source - local Player = QBCore.Functions.GetPlayer(src) - if QBCore.Functions.HasPermission(source, "admin") or QBCore.Functions.HasPermission(source, "god") then - QBCore.Config.Server.closed = false - TriggerClientEvent("qbadmin:client:SetServerStatus", -1, false) - else - QBCore.Functions.Kick(src, "You don't have permissions for this..", nil, nil) - end -end) - -RegisterServerEvent("QBCore:UpdatePlayer") -AddEventHandler('QBCore:UpdatePlayer', function(data) +RegisterNetEvent('QBCore:server:OpenServer', function() local src = source + if QBCore.Functions.HasPermission(src, 'admin') or QBCore.Functions.HasPermission(src, 'god') then + QBCore.Config.Server.closed = false + TriggerClientEvent('qbadmin:client:SetServerStatus', -1, false) + else + QBCore.Functions.Kick(src, 'You don\'t have permissions for this..', nil, nil) + end +end) + +-- Callbacks + +RegisterNetEvent('QBCore:Server:TriggerCallback', function(name, ...) + local src = source + QBCore.Functions.TriggerCallback(name, src, function(...) + TriggerClientEvent('QBCore:Client:TriggerCallback', src, name, ...) + end, ...) +end) + +-- Player + +RegisterNetEvent('QBCore:UpdatePlayer', function() + local src = source + local ped = GetPlayerPed(src) local Player = QBCore.Functions.GetPlayer(src) - if Player ~= nil then - Player.PlayerData.position = data.position - local newHunger = Player.PlayerData.metadata["hunger"] - QBCore.Config.Player.HungerRate - local newThirst = Player.PlayerData.metadata["thirst"] - QBCore.Config.Player.ThirstRate + if Player then + Player.PlayerData.position = GetEntityCoords(ped) + local newHunger = Player.PlayerData.metadata['hunger'] - QBCore.Config.Player.HungerRate + local newThirst = Player.PlayerData.metadata['thirst'] - QBCore.Config.Player.ThirstRate if newHunger <= 0 then newHunger = 0 end if newThirst <= 0 then newThirst = 0 end - Player.Functions.SetMetaData("thirst", newThirst) - Player.Functions.SetMetaData("hunger", newHunger) - TriggerClientEvent("hud:client:UpdateNeeds", src, newHunger, newThirst) + Player.Functions.SetMetaData('thirst', newThirst) + Player.Functions.SetMetaData('hunger', newHunger) + TriggerClientEvent('hud:client:UpdateNeeds', src, newHunger, newThirst) Player.Functions.Save() end end) -RegisterServerEvent("QBCore:UpdatePlayerPosition") -AddEventHandler("QBCore:UpdatePlayerPosition", function(position) - local src = source +RegisterNetEvent('QBCore:Server:SetMetaData', function(meta, data) + local src = source local Player = QBCore.Functions.GetPlayer(src) - if Player ~= nil then - Player.PlayerData.position = position + if meta == 'hunger' or meta == 'thirst' then + if data > 100 then + data = 100 + end end + if Player then + Player.Functions.SetMetaData(meta, data) + end + TriggerClientEvent('hud:client:UpdateNeeds', src, Player.PlayerData.metadata['hunger'], Player.PlayerData.metadata['thirst']) end) -RegisterServerEvent("QBCore:Server:TriggerCallback") -AddEventHandler('QBCore:Server:TriggerCallback', function(name, ...) - local src = source - QBCore.Functions.TriggerCallback(name, src, function(...) - TriggerClientEvent("QBCore:Client:TriggerCallback", src, name, ...) - end, ...) -end) - -RegisterServerEvent("QBCore:Server:UseItem") -AddEventHandler('QBCore:Server:UseItem', function(item) +RegisterNetEvent('QBCore:ToggleDuty', function() local src = source local Player = QBCore.Functions.GetPlayer(src) - if item ~= nil and item.amount > 0 then + if Player.PlayerData.job.onduty then + Player.Functions.SetJobDuty(false) + TriggerClientEvent('QBCore:Notify', src, 'You are now off duty!') + else + Player.Functions.SetJobDuty(true) + TriggerClientEvent('QBCore:Notify', src, 'You are now on duty!') + end + TriggerClientEvent('QBCore:Client:SetDuty', src, Player.PlayerData.job.onduty) +end) + +-- Items + +RegisterNetEvent('QBCore:Server:UseItem', function(item) + local src = source + if item and item.amount > 0 then if QBCore.Functions.CanUseItem(item.name) then QBCore.Functions.UseItem(src, item) end end end) -RegisterServerEvent("QBCore:Server:RemoveItem") -AddEventHandler('QBCore:Server:RemoveItem', function(itemName, amount, slot) +RegisterNetEvent('QBCore:Server:RemoveItem', function(itemName, amount, slot) local src = source local Player = QBCore.Functions.GetPlayer(src) Player.Functions.RemoveItem(itemName, amount, slot) end) -RegisterServerEvent("QBCore:Server:AddItem") -AddEventHandler('QBCore:Server:AddItem', function(itemName, amount, slot, info) +RegisterNetEvent('QBCore:Server:AddItem', function(itemName, amount, slot, info) local src = source local Player = QBCore.Functions.GetPlayer(src) Player.Functions.AddItem(itemName, amount, slot, info) end) -RegisterServerEvent('QBCore:Server:SetMetaData') -AddEventHandler('QBCore:Server:SetMetaData', function(meta, data) - local src = source - local Player = QBCore.Functions.GetPlayer(src) - if meta == "hunger" or meta == "thirst" then - if data > 100 then - data = 100 - end - end - if Player ~= nil then - Player.Functions.SetMetaData(meta, data) - end - TriggerClientEvent("hud:client:UpdateNeeds", src, Player.PlayerData.metadata["hunger"], Player.PlayerData.metadata["thirst"]) -end) +-- Non-Chat Command Calling (ex: qb-adminmenu) -AddEventHandler('chatMessage', function(source, n, message) - if string.sub(message, 1, 1) == "/" then - local args = QBCore.Shared.SplitStr(message, " ") - local command = string.gsub(args[1]:lower(), "/", "") - CancelEvent() - if QBCore.Commands.List[command] ~= nil then - local Player = QBCore.Functions.GetPlayer(tonumber(source)) - if Player ~= nil then - table.remove(args, 1) - if (QBCore.Functions.HasPermission(source, "god") or QBCore.Functions.HasPermission(source, QBCore.Commands.List[command].permission)) then - if (QBCore.Commands.List[command].argsrequired and #QBCore.Commands.List[command].arguments ~= 0 and args[#QBCore.Commands.List[command].arguments] == nil) then - TriggerClientEvent('QBCore:Notify', source, "All arguments must be filled out!", "error") - local agus = "" - for name, help in pairs(QBCore.Commands.List[command].arguments) do - agus = agus .. " ["..help.name.."]" - end - TriggerClientEvent('chatMessage', source, "/"..command, false, agus) - else - QBCore.Commands.List[command].callback(source, args) - end - else - TriggerClientEvent('QBCore:Notify', source, "No Access To This Command", "error") - end - end - end - end -end) - -RegisterServerEvent('QBCore:CallCommand') -AddEventHandler('QBCore:CallCommand', function(command, args) - if QBCore.Commands.List[command] ~= nil then - local Player = QBCore.Functions.GetPlayer(tonumber(source)) - if Player ~= nil then - if (QBCore.Functions.HasPermission(source, "god")) or (QBCore.Functions.HasPermission(source, QBCore.Commands.List[command].permission)) or (QBCore.Commands.List[command].permission == Player.PlayerData.job.name) then +RegisterNetEvent('QBCore:CallCommand', function(command, args) + local src = source + if QBCore.Commands.List[command] then + local Player = QBCore.Functions.GetPlayer(src) + if Player then + local isGod = QBCore.Functions.HasPermission(src, 'god') + local hasPerm = QBCore.Functions.HasPermission(src, QBCore.Commands.List[command].permission) + local isPrincipal = IsPrincipalAceAllowed('group.admin', 'command') + if (QBCore.Commands.List[command].permission == Player.PlayerData.job.name) or isGod or hasPerm or isPrincipal then if (QBCore.Commands.List[command].argsrequired and #QBCore.Commands.List[command].arguments ~= 0 and args[#QBCore.Commands.List[command].arguments] == nil) then - TriggerClientEvent('QBCore:Notify', source, "All arguments must be filled out!", "error") - local agus = "" - for name, help in pairs(QBCore.Commands.List[command].arguments) do - agus = agus .. " ["..help.name.."]" - end - TriggerClientEvent('chatMessage', source, "/"..command, false, agus) + TriggerClientEvent('QBCore:Notify', src, 'All arguments must be filled out!', 'error') else - QBCore.Commands.List[command].callback(source, args) + QBCore.Commands.List[command].callback(src, args) end else - TriggerClientEvent('QBCore:Notify', source, "No Access To This Command", "error") + TriggerClientEvent('QBCore:Notify', src, 'No Access To This Command', 'error') end end end end) -RegisterServerEvent("QBCore:AddCommand") -AddEventHandler('QBCore:AddCommand', function(name, help, arguments, argsrequired, callback, persmission) - QBCore.Commands.Add(name, help, arguments, argsrequired, callback, persmission) -end) - -RegisterServerEvent("QBCore:ToggleDuty") -AddEventHandler('QBCore:ToggleDuty', function() - local src = source - local Player = QBCore.Functions.GetPlayer(src) - if Player.PlayerData.job.onduty then - Player.Functions.SetJobDuty(false) - TriggerClientEvent('QBCore:Notify', src, "You are now off duty!") - else - Player.Functions.SetJobDuty(true) - TriggerClientEvent('QBCore:Notify', src, "You are now on duty!") - end - TriggerClientEvent("QBCore:Client:SetDuty", src, Player.PlayerData.job.onduty) -end) - -Citizen.CreateThread(function() - local result = exports.oxmysql:fetchSync('SELECT * FROM permissions', {}) - if result[1] ~= nil then - for k, v in pairs(result) do - QBCore.Config.Server.PermissionList[v.license] = { - license = v.license, - permission = v.permission, - optin = true, - } - end - end -end) +-- Has Item Callback (can also use client function - QBCore.Functions.HasItem(item)) QBCore.Functions.CreateCallback('QBCore:HasItem', function(source, cb, items, amount) + local src = source local retval = false - local Player = QBCore.Functions.GetPlayer(source) - if Player ~= nil then + local Player = QBCore.Functions.GetPlayer(src) + if Player then if type(items) == 'table' then local count = 0 - local finalcount = 0 + local finalcount = 0 for k, v in pairs(items) do - if type(k) == 'string' then - finalcount = 0 - for i, _ in pairs(items) do - if i then finalcount = finalcount + 1 end - end + if type(k) == 'string' then + finalcount = 0 + for i, _ in pairs(items) do + if i then finalcount = finalcount + 1 end + end local item = Player.Functions.GetItemByName(k) - if item ~= nil then + if item then if item.amount >= v then count = count + 1 if count == finalcount then @@ -268,10 +236,10 @@ QBCore.Functions.CreateCallback('QBCore:HasItem', function(source, cb, items, am end end else - finalcount = #items + finalcount = #items local item = Player.Functions.GetItemByName(v) - if item ~= nil then - if amount ~= nil then + if item then + if amount then if item.amount >= amount then count = count + 1 if count == finalcount then @@ -289,8 +257,8 @@ QBCore.Functions.CreateCallback('QBCore:HasItem', function(source, cb, items, am end else local item = Player.Functions.GetItemByName(items) - if item ~= nil then - if amount ~= nil then + if item then + if amount then if item.amount >= amount then retval = true end @@ -300,17 +268,5 @@ QBCore.Functions.CreateCallback('QBCore:HasItem', function(source, cb, items, am end end end - cb(retval) -end) - -RegisterServerEvent('QBCore:Command:CheckOwnedVehicle') -AddEventHandler('QBCore:Command:CheckOwnedVehicle', function(VehiclePlate) - if VehiclePlate ~= nil then - local result = exports.oxmysql:fetchSync('SELECT * FROM player_vehicles WHERE plate = ?', { VehiclePlate }) - if result[1] ~= nil then - exports.oxmysql:execute('UPDATE player_vehicles SET state = ? WHERE citizenid = ?', { 1, result[1].citizenid }) - TriggerEvent('qb-garages:server:RemoveVehicle', result[1].citizenid, VehiclePlate) - end - end -end) +end) \ No newline at end of file diff --git a/server/functions.lua b/server/functions.lua index e81f6a9..b3da399 100644 --- a/server/functions.lua +++ b/server/functions.lua @@ -1,19 +1,20 @@ QBCore.Functions = {} -QBCore.Functions.GetEntityCoords = function(entity) +-- Getters +-- Get your player first and then trigger a function on them +-- ex: local player = QBCore.Functions.GetPlayer(source) +-- ex: local example = player.Functions.functionname(parameter) + +function QBCore.Functions.GetCoords(entity) local coords = GetEntityCoords(entity, false) local heading = GetEntityHeading(entity) - return { - x = coords.x, - y = coords.y, - z = coords.z, - a = heading - } + return vector4(coords.x, coords.y, coords.z, heading) end -QBCore.Functions.GetIdentifier = function(source, idtype) - local idtype = idtype ~=nil and idtype or QBConfig.IdentifierType - for _, identifier in pairs(GetPlayerIdentifiers(source)) do +function QBCore.Functions.GetIdentifier(source, idtype) + local src = source + local idtype = idtype or QBConfig.IdentifierType + for _, identifier in pairs(GetPlayerIdentifiers(src)) do if string.find(identifier, idtype) then return identifier end @@ -21,7 +22,7 @@ QBCore.Functions.GetIdentifier = function(source, idtype) return nil end -QBCore.Functions.GetSource = function(identifier) +function QBCore.Functions.GetSource(identifier) for src, player in pairs(QBCore.Players) do local idens = GetPlayerIdentifiers(src) for _, id in pairs(idens) do @@ -33,15 +34,16 @@ QBCore.Functions.GetSource = function(identifier) return 0 end -QBCore.Functions.GetPlayer = function(source) - if type(source) == "number" then - return QBCore.Players[source] +function QBCore.Functions.GetPlayer(source) + local src = source + if type(src) == 'number' then + return QBCore.Players[src] else - return QBCore.Players[QBCore.Functions.GetSource(source)] + return QBCore.Players[QBCore.Functions.GetSource(src)] end end -QBCore.Functions.GetPlayerByCitizenId = function(citizenid) +function QBCore.Functions.GetPlayerByCitizenId(citizenid) for src, player in pairs(QBCore.Players) do local cid = citizenid if QBCore.Players[src].PlayerData.citizenid == cid then @@ -51,7 +53,7 @@ QBCore.Functions.GetPlayerByCitizenId = function(citizenid) return nil end -QBCore.Functions.GetPlayerByPhone = function(number) +function QBCore.Functions.GetPlayerByPhone(number) for src, player in pairs(QBCore.Players) do local cid = citizenid if QBCore.Players[src].PlayerData.charinfo.phone == number then @@ -61,7 +63,7 @@ QBCore.Functions.GetPlayerByPhone = function(number) return nil end -QBCore.Functions.GetPlayers = function() +function QBCore.Functions.GetPlayers() local sources = {} for k, v in pairs(QBCore.Players) do table.insert(sources, k) @@ -69,174 +71,215 @@ QBCore.Functions.GetPlayers = function() return sources end -QBCore.Functions.CreateCallback = function(name, cb) +-- Paychecks (standalone - don't touch) + +function PaycheckLoop() + local Players = QBCore.Functions.GetPlayers() + for i=1, #Players, 1 do + local Player = QBCore.Functions.GetPlayer(Players[i]) + if Player.PlayerData.job and Player.PlayerData.job.payment > 0 then + Player.Functions.AddMoney('bank', Player.PlayerData.job.payment) + TriggerClientEvent('QBCore:Notify', Players[i], 'You received your paycheck of $'..Player.PlayerData.job.payment) + end + end + SetTimeout(QBCore.Config.Money.PayCheckTimeOut * (60 * 1000), PaycheckLoop) +end + +-- Callbacks + +function QBCore.Functions.CreateCallback(name, cb) QBCore.ServerCallbacks[name] = cb end -QBCore.Functions.TriggerCallback = function(name, source, cb, ...) - if QBCore.ServerCallbacks[name] ~= nil then - QBCore.ServerCallbacks[name](source, cb, ...) +function QBCore.Functions.TriggerCallback(name, source, cb, ...) + local src = source + if QBCore.ServerCallbacks[name] then + QBCore.ServerCallbacks[name](src, cb, ...) end end -QBCore.Functions.CreateUseableItem = function(item, cb) +-- Items + +function QBCore.Functions.CreateUseableItem(item, cb) QBCore.UseableItems[item] = cb end -QBCore.Functions.CanUseItem = function(item) - return QBCore.UseableItems[item] ~= nil +function QBCore.Functions.CanUseItem(item) + return QBCore.UseableItems[item] end -QBCore.Functions.UseItem = function(source, item) - QBCore.UseableItems[item.name](source, item) -end - -QBCore.Functions.Kick = function(source, reason, setKickReason, deferrals) +function QBCore.Functions.UseItem(source, item) local src = source - reason = "\n"..reason.."\n🔸 Check our Discord for further information: "..QBCore.Config.Server.discord - if(setKickReason ~=nil) then + QBCore.UseableItems[item.name](src, item) +end + +-- Kick Player + +function QBCore.Functions.Kick(source, reason, setKickReason, deferrals) + local src = source + reason = '\n'..reason..'\n🔸 Check our Discord for further information: '..QBCore.Config.Server.discord + if setKickReason then setKickReason(reason) end - Citizen.CreateThread(function() - if(deferrals ~= nil)then + CreateThread(function() + if deferrals then deferrals.update(reason) - Citizen.Wait(2500) + Wait(2500) end - if src ~= nil then + if src then DropPlayer(src, reason) end local i = 0 while (i <= 4) do i = i + 1 while true do - if src ~= nil then + if src then if(GetPlayerPing(src) >= 0) then break end - Citizen.Wait(100) - Citizen.CreateThread(function() + Wait(100) + CreateThread(function() DropPlayer(src, reason) end) end end - Citizen.Wait(5000) + Wait(5000) end end) end -QBCore.Functions.IsWhitelisted = function(source) - local identifiers = GetPlayerIdentifiers(source) - local rtn = false - if (QBCore.Config.Server.whitelist) then - local result = exports.oxmysql:fetchSync('SELECT * FROM whitelist WHERE license = ?', { QBCore.Functions.GetIdentifier(source, 'license') }) - local data = result[1] - if data ~= nil then +-- Check if player is whitelisted (not used anywhere) + +function QBCore.Functions.IsWhitelisted(source) + local src = source + local plicense = QBCore.Functions.GetIdentifier(src, 'license') + local identifiers = GetPlayerIdentifiers(src) + if QBCore.Config.Server.whitelist then + local result = exports.oxmysql:fetchSync('SELECT * FROM whitelist WHERE license = ?', {plicense}) + if result[1] then for _, id in pairs(identifiers) do - if data.license == id then - rtn = true + if result[1].license == id then + return true end end end else - rtn = true + return true end - return rtn + return false end -QBCore.Functions.AddPermission = function(source, permission) - local Player = QBCore.Functions.GetPlayer(source) - if Player ~= nil then - QBCore.Config.Server.PermissionList[QBCore.Functions.GetIdentifier(source, 'license')] = { - license = QBCore.Functions.GetIdentifier(source, 'license'), +-- Setting & Removing Permissions + +function QBCore.Functions.AddPermission(source, permission) + local src = source + local Player = QBCore.Functions.GetPlayer(src) + local plicense = Player.PlayerData.license + if Player then + QBCore.Config.Server.PermissionList[plicense] = { + license = plicense, permission = permission:lower(), } - exports.oxmysql:execute('DELETE FROM permissions WHERE license = ?', { QBCore.Functions.GetIdentifier(source, 'license') }) + exports.oxmysql:execute('DELETE FROM permissions WHERE license = ?', {plicense}) exports.oxmysql:insert('INSERT INTO permissions (name, license, permission) VALUES (?, ?, ?)', { - GetPlayerName(source), - QBCore.Functions.GetIdentifier(source, 'license'), + GetPlayerName(src), + plicense, permission:lower() }) Player.Functions.UpdatePlayerData() - TriggerClientEvent('QBCore:Client:OnPermissionUpdate', source, permission) + TriggerClientEvent('QBCore:Client:OnPermissionUpdate', src, permission) end end -QBCore.Functions.RemovePermission = function(source) - local Player = QBCore.Functions.GetPlayer(source) - if Player ~= nil then - QBCore.Config.Server.PermissionList[QBCore.Functions.GetIdentifier(source, 'license')] = nil - exports.oxmysql:execute('DELETE FROM permissions WHERE license = ?', { QBCore.Functions.GetIdentifier(source, 'license') }) +function QBCore.Functions.RemovePermission(source) + local src = source + local Player = QBCore.Functions.GetPlayer(src) + local license = Player.PlayerData.license + if Player then + QBCore.Config.Server.PermissionList[license] = nil + exports.oxmysql:execute('DELETE FROM permissions WHERE license = ?', {license}) Player.Functions.UpdatePlayerData() end end -QBCore.Functions.HasPermission = function(source, permission) - local retval = false - local license = QBCore.Functions.GetIdentifier(source, 'license') +-- Checking for Permission Level + +function QBCore.Functions.HasPermission(source, permission) + local src = source + local license = QBCore.Functions.GetIdentifier(src, 'license') local permission = tostring(permission:lower()) - if permission == "user" then - retval = true + if permission == 'user' then + return true else - if QBCore.Config.Server.PermissionList[license] ~= nil then + if QBCore.Config.Server.PermissionList[license] then if QBCore.Config.Server.PermissionList[license].license == license then - if QBCore.Config.Server.PermissionList[license].permission == permission or QBCore.Config.Server.PermissionList[license].permission == "god" then - retval = true + if QBCore.Config.Server.PermissionList[license].permission == permission or QBCore.Config.Server.PermissionList[license].permission == 'god' then + return true end end end end - return retval + return false end -QBCore.Functions.GetPermission = function(source) - local retval = "user" - Player = QBCore.Functions.GetPlayer(source) - local license = QBCore.Functions.GetIdentifier(source, 'license') - if Player ~= nil then - if QBCore.Config.Server.PermissionList[Player.PlayerData.license] ~= nil then - if QBCore.Config.Server.PermissionList[Player.PlayerData.license].license == license then - retval = QBCore.Config.Server.PermissionList[Player.PlayerData.license].permission +function QBCore.Functions.GetPermission(source) + local src = source + local license = QBCore.Functions.GetIdentifier(src, 'license') + if license then + if QBCore.Config.Server.PermissionList[license] then + if QBCore.Config.Server.PermissionList[license].license == license then + return QBCore.Config.Server.PermissionList[license].permission end end end - return retval + return 'user' end -QBCore.Functions.IsOptin = function(source) - local retval = false - local license = QBCore.Functions.GetIdentifier(source, 'license') - if QBCore.Functions.HasPermission(source, "admin") then +-- Opt in or out of admin reports + +function QBCore.Functions.IsOptin(source) + local src = source + local license = QBCore.Functions.GetIdentifier(src, 'license') + if QBCore.Functions.HasPermission(src, 'admin') then retval = QBCore.Config.Server.PermissionList[license].optin + return true end - return retval + return false end -QBCore.Functions.ToggleOptin = function(source) - local license = QBCore.Functions.GetIdentifier(source, 'license') - if QBCore.Functions.HasPermission(source, "admin") then +function QBCore.Functions.ToggleOptin(source) + local src = source + local license = QBCore.Functions.GetIdentifier(src, 'license') + if QBCore.Functions.HasPermission(src, 'admin') then QBCore.Config.Server.PermissionList[license].optin = not QBCore.Config.Server.PermissionList[license].optin end end -QBCore.Functions.IsPlayerBanned = function (source) +-- Check if player is banned + +function QBCore.Functions.IsPlayerBanned(source) + local src = source local retval = false - local message = "" - local result = exports.oxmysql:fetchSync('SELECT * FROM bans WHERE license = ?', { QBCore.Functions.GetIdentifier(source, 'license') }) - if result[1] ~= nil then + local message = '' + local plicense = QBCore.Functions.GetIdentifier(src, 'license') + local result = exports.oxmysql:fetchSync('SELECT * FROM bans WHERE license = ?', {plicense}) + if result[1] then if os.time() < result[1].expire then retval = true - local timeTable = os.date("*t", tonumber(result.expire)) - message = "You have been banned from the server:\n"..result[1].reason.."\nYour ban expires "..timeTable.day.. "/" .. timeTable.month .. "/" .. timeTable.year .. " " .. timeTable.hour.. ":" .. timeTable.min .. "\n" + local timeTable = os.date('*t', tonumber(result.expire)) + message = 'You have been banned from the server:\n'..result[1].reason..'\nYour ban expires '..timeTable.day.. '/' .. timeTable.month .. '/' .. timeTable.year .. ' ' .. timeTable.hour.. ':' .. timeTable.min .. '\n' else - exports.oxmysql:execute('DELETE FROM bans WHERE id = ?', { result[1].id }) + exports.oxmysql:execute('DELETE FROM bans WHERE id = ?', {result[1].id}) end end return retval, message end -QBCore.Functions.IsLicenseInUse = function(license) +-- Check for duplicate license + +function QBCore.Functions.IsLicenseInUse(license) local players = GetPlayers() for _, player in pairs(players) do local identifiers = GetPlayerIdentifiers(player) diff --git a/server/loops.lua b/server/loops.lua deleted file mode 100644 index 5720afb..0000000 --- a/server/loops.lua +++ /dev/null @@ -1,13 +0,0 @@ -PaycheckLoop = function() - local Players = QBCore.Functions.GetPlayers() - - for i=1, #Players, 1 do - local Player = QBCore.Functions.GetPlayer(Players[i]) - - if Player.PlayerData.job ~= nil and Player.PlayerData.job.payment > 0 then - Player.Functions.AddMoney('bank', Player.PlayerData.job.payment) - TriggerClientEvent('QBCore:Notify', Players[i], "You received your paycheck of $"..Player.PlayerData.job.payment) - end - end - SetTimeout(QBCore.Config.Money.PayCheckTimeOut * (60 * 1000), PaycheckLoop) -end diff --git a/server/main.lua b/server/main.lua index 5422929..03ec598 100644 --- a/server/main.lua +++ b/server/main.lua @@ -4,11 +4,25 @@ QBCore.Shared = QBShared QBCore.ServerCallbacks = {} QBCore.UseableItems = {} -function GetCoreObject() +exports('GetCoreObject', function() return QBCore -end +end) -RegisterServerEvent('QBCore:GetObject') -AddEventHandler('QBCore:GetObject', function(cb) - cb(GetCoreObject()) +-- To use this export in a script instead of manifest method +-- Just put this line of code below at the very top of the script +-- local QBCore = exports['qb-core']:GetCoreObject() + +-- Get permissions on server start + +CreateThread(function() + local result = exports.oxmysql:fetchSync('SELECT * FROM permissions', {}) + if result[1] then + for k, v in pairs(result) do + QBCore.Config.Server.PermissionList[v.license] = { + license = v.license, + permission = v.permission, + optin = true, + } + end + end end) \ No newline at end of file diff --git a/server/player.lua b/server/player.lua index 0ce1be7..f40d210 100644 --- a/server/player.lua +++ b/server/player.lua @@ -1,142 +1,157 @@ QBCore.Players = {} QBCore.Player = {} -QBCore.Player.Login = function(source, citizenid, newData) - if source ~= nil then +-- On player login get their data or set defaults +-- Don't touch any of this unless you know what you are doing +-- Will cause major issues! + +function QBCore.Player.Login(source, citizenid, newData) + local src = source + if src then if citizenid then local result = exports.oxmysql:fetchSync('SELECT * FROM players WHERE citizenid = ?', { citizenid }) local PlayerData = result[1] - if PlayerData ~= nil then + if PlayerData then PlayerData.money = json.decode(PlayerData.money) PlayerData.job = json.decode(PlayerData.job) PlayerData.position = json.decode(PlayerData.position) PlayerData.metadata = json.decode(PlayerData.metadata) PlayerData.charinfo = json.decode(PlayerData.charinfo) - if PlayerData.gang ~= nil then + if PlayerData.gang then PlayerData.gang = json.decode(PlayerData.gang) else PlayerData.gang = {} end end - QBCore.Player.CheckPlayerData(source, PlayerData) + QBCore.Player.CheckPlayerData(src, PlayerData) else - QBCore.Player.CheckPlayerData(source, newData) + QBCore.Player.CheckPlayerData(src, newData) end return true else - QBCore.ShowError(GetCurrentResourceName(), "ERROR QBCORE.PLAYER.LOGIN - NO SOURCE GIVEN!") + QBCore.ShowError(GetCurrentResourceName(), 'ERROR QBCORE.PLAYER.LOGIN - NO SOURCE GIVEN!') return false end end -QBCore.Player.CheckPlayerData = function(source, PlayerData) - PlayerData = PlayerData ~= nil and PlayerData or {} - - PlayerData.source = source - PlayerData.citizenid = PlayerData.citizenid ~= nil and PlayerData.citizenid or QBCore.Player.CreateCitizenId() - PlayerData.license = PlayerData.license ~= nil and PlayerData.license or QBCore.Functions.GetIdentifier(source, 'license') - PlayerData.name = GetPlayerName(source) - PlayerData.cid = PlayerData.cid ~= nil and PlayerData.cid or 1 - - PlayerData.money = PlayerData.money ~= nil and PlayerData.money or {} +function QBCore.Player.CheckPlayerData(source, PlayerData) + local src = source + PlayerData = PlayerData or {} + PlayerData.source = src + PlayerData.citizenid = PlayerData.citizenid or QBCore.Player.CreateCitizenId() + PlayerData.license = PlayerData.license or QBCore.Functions.GetIdentifier(src, 'license') + PlayerData.name = GetPlayerName(src) + PlayerData.cid = PlayerData.cid or 1 + PlayerData.money = PlayerData.money or {} for moneytype, startamount in pairs(QBCore.Config.Money.MoneyTypes) do - PlayerData.money[moneytype] = PlayerData.money[moneytype] ~= nil and PlayerData.money[moneytype] or startamount + PlayerData.money[moneytype] = PlayerData.money[moneytype] or startamount end - - PlayerData.charinfo = PlayerData.charinfo ~= nil and PlayerData.charinfo or {} - PlayerData.charinfo.firstname = PlayerData.charinfo.firstname ~= nil and PlayerData.charinfo.firstname or "Firstname" - PlayerData.charinfo.lastname = PlayerData.charinfo.lastname ~= nil and PlayerData.charinfo.lastname or "Lastname" - PlayerData.charinfo.birthdate = PlayerData.charinfo.birthdate ~= nil and PlayerData.charinfo.birthdate or "00-00-0000" - PlayerData.charinfo.gender = PlayerData.charinfo.gender ~= nil and PlayerData.charinfo.gender or 0 - PlayerData.charinfo.backstory = PlayerData.charinfo.backstory ~= nil and PlayerData.charinfo.backstory or "placeholder backstory" - PlayerData.charinfo.nationality = PlayerData.charinfo.nationality ~= nil and PlayerData.charinfo.nationality or "USA" - PlayerData.charinfo.phone = PlayerData.charinfo.phone ~= nil and PlayerData.charinfo.phone or "1"..math.random(111111111, 999999999) - PlayerData.charinfo.account = PlayerData.charinfo.account ~= nil and PlayerData.charinfo.account or "US0"..math.random(1,9).."QBCore"..math.random(1111,9999)..math.random(1111,9999)..math.random(11,99) - - PlayerData.metadata = PlayerData.metadata ~= nil and PlayerData.metadata or {} - PlayerData.metadata["hunger"] = PlayerData.metadata["hunger"] ~= nil and PlayerData.metadata["hunger"] or 100 - PlayerData.metadata["thirst"] = PlayerData.metadata["thirst"] ~= nil and PlayerData.metadata["thirst"] or 100 - PlayerData.metadata["stress"] = PlayerData.metadata["stress"] ~= nil and PlayerData.metadata["stress"] or 0 - PlayerData.metadata["isdead"] = PlayerData.metadata["isdead"] ~= nil and PlayerData.metadata["isdead"] or false - PlayerData.metadata["inlaststand"] = PlayerData.metadata["inlaststand"] ~= nil and PlayerData.metadata["inlaststand"] or false - PlayerData.metadata["armor"] = PlayerData.metadata["armor"] ~= nil and PlayerData.metadata["armor"] or 0 - PlayerData.metadata["ishandcuffed"] = PlayerData.metadata["ishandcuffed"] ~= nil and PlayerData.metadata["ishandcuffed"] or false - PlayerData.metadata["tracker"] = PlayerData.metadata["tracker"] ~= nil and PlayerData.metadata["tracker"] or false - PlayerData.metadata["injail"] = PlayerData.metadata["injail"] ~= nil and PlayerData.metadata["injail"] or 0 - PlayerData.metadata["jailitems"] = PlayerData.metadata["jailitems"] ~= nil and PlayerData.metadata["jailitems"] or {} - PlayerData.metadata["status"] = PlayerData.metadata["status"] ~= nil and PlayerData.metadata["status"] or {} - PlayerData.metadata["phone"] = PlayerData.metadata["phone"] ~= nil and PlayerData.metadata["phone"] or {} - PlayerData.metadata["fitbit"] = PlayerData.metadata["fitbit"] ~= nil and PlayerData.metadata["fitbit"] or {} - PlayerData.metadata["commandbinds"] = PlayerData.metadata["commandbinds"] ~= nil and PlayerData.metadata["commandbinds"] or {} - PlayerData.metadata["bloodtype"] = PlayerData.metadata["bloodtype"] ~= nil and PlayerData.metadata["bloodtype"] or QBCore.Config.Player.Bloodtypes[math.random(1, #QBCore.Config.Player.Bloodtypes)] - PlayerData.metadata["dealerrep"] = PlayerData.metadata["dealerrep"] ~= nil and PlayerData.metadata["dealerrep"] or 0 - PlayerData.metadata["craftingrep"] = PlayerData.metadata["craftingrep"] ~= nil and PlayerData.metadata["craftingrep"] or 0 - PlayerData.metadata["attachmentcraftingrep"] = PlayerData.metadata["attachmentcraftingrep"] ~= nil and PlayerData.metadata["attachmentcraftingrep"] or 0 - PlayerData.metadata["currentapartment"] = PlayerData.metadata["currentapartment"] ~= nil and PlayerData.metadata["currentapartment"] or nil - PlayerData.metadata["jobrep"] = PlayerData.metadata["jobrep"] ~= nil and PlayerData.metadata["jobrep"] or { - ["tow"] = 0, - ["trucker"] = 0, - ["taxi"] = 0, - ["hotdog"] = 0, + -- Charinfo + PlayerData.charinfo = PlayerData.charinfo or {} + PlayerData.charinfo.firstname = PlayerData.charinfo.firstname or 'Firstname' + PlayerData.charinfo.lastname = PlayerData.charinfo.lastname or 'Lastname' + PlayerData.charinfo.birthdate = PlayerData.charinfo.birthdate or '00-00-0000' + PlayerData.charinfo.gender = PlayerData.charinfo.gender or 0 + PlayerData.charinfo.backstory = PlayerData.charinfo.backstory or 'placeholder backstory' + PlayerData.charinfo.nationality = PlayerData.charinfo.nationality or 'USA' + PlayerData.charinfo.phone = PlayerData.charinfo.phone ~= nil and PlayerData.charinfo.phone or '1'..math.random(111111111, 999999999) + PlayerData.charinfo.account = PlayerData.charinfo.account ~= nil and PlayerData.charinfo.account or 'US0'..math.random(1,9)..'QBCore'..math.random(1111,9999)..math.random(1111,9999)..math.random(11,99) + -- Metadata + PlayerData.metadata = PlayerData.metadata or {} + PlayerData.metadata['hunger'] = PlayerData.metadata['hunger'] or 100 + PlayerData.metadata['thirst'] = PlayerData.metadata['thirst'] or 100 + PlayerData.metadata['stress'] = PlayerData.metadata['stress'] or 0 + PlayerData.metadata['isdead'] = PlayerData.metadata['isdead'] or false + PlayerData.metadata['inlaststand'] = PlayerData.metadata['inlaststand'] or false + PlayerData.metadata['armor'] = PlayerData.metadata['armor'] or 0 + PlayerData.metadata['ishandcuffed'] = PlayerData.metadata['ishandcuffed'] or false + PlayerData.metadata['tracker'] = PlayerData.metadata['tracker'] or false + PlayerData.metadata['injail'] = PlayerData.metadata['injail'] or 0 + PlayerData.metadata['jailitems'] = PlayerData.metadata['jailitems'] or {} + PlayerData.metadata['status'] = PlayerData.metadata['status'] or {} + PlayerData.metadata['phone'] = PlayerData.metadata['phone'] or {} + PlayerData.metadata['fitbit'] = PlayerData.metadata['fitbit'] or {} + PlayerData.metadata['commandbinds'] = PlayerData.metadata['commandbinds'] or {} + PlayerData.metadata['bloodtype'] = PlayerData.metadata['bloodtype'] or QBCore.Config.Player.Bloodtypes[math.random(1, #QBCore.Config.Player.Bloodtypes)] + PlayerData.metadata['dealerrep'] = PlayerData.metadata['dealerrep'] or 0 + PlayerData.metadata['craftingrep'] = PlayerData.metadata['craftingrep'] or 0 + PlayerData.metadata['attachmentcraftingrep'] = PlayerData.metadata['attachmentcraftingrep'] or 0 + PlayerData.metadata['currentapartment'] = PlayerData.metadata['currentapartment'] or nil + PlayerData.metadata['jobrep'] = PlayerData.metadata['jobrep'] or { + ['tow'] = 0, + ['trucker'] = 0, + ['taxi'] = 0, + ['hotdog'] = 0, } - PlayerData.metadata["callsign"] = PlayerData.metadata["callsign"] ~= nil and PlayerData.metadata["callsign"] or "NO CALLSIGN" - PlayerData.metadata["fingerprint"] = PlayerData.metadata["fingerprint"] ~= nil and PlayerData.metadata["fingerprint"] or QBCore.Player.CreateFingerId() - PlayerData.metadata["walletid"] = PlayerData.metadata["walletid"] ~= nil and PlayerData.metadata["walletid"] or QBCore.Player.CreateWalletId() - PlayerData.metadata["criminalrecord"] = PlayerData.metadata["criminalrecord"] ~= nil and PlayerData.metadata["criminalrecord"] or { - ["hasRecord"] = false, - ["date"] = nil + PlayerData.metadata['callsign'] = PlayerData.metadata['callsign'] or 'NO CALLSIGN' + PlayerData.metadata['fingerprint'] = PlayerData.metadata['fingerprint'] or QBCore.Player.CreateFingerId() + PlayerData.metadata['walletid'] = PlayerData.metadata['walletid'] or QBCore.Player.CreateWalletId() + PlayerData.metadata['criminalrecord'] = PlayerData.metadata['criminalrecord'] or { + ['hasRecord'] = false, + ['date'] = nil } - PlayerData.metadata["licences"] = PlayerData.metadata["licences"] ~= nil and PlayerData.metadata["licences"] or { - ["driver"] = true, - ["business"] = false, - ["weapon"] = false + PlayerData.metadata['licences'] = PlayerData.metadata['licences'] or { + ['driver'] = true, + ['business'] = false, + ['weapon'] = false } - PlayerData.metadata["inside"] = PlayerData.metadata["inside"] ~= nil and PlayerData.metadata["inside"] or { + PlayerData.metadata['inside'] = PlayerData.metadata['inside'] or { house = nil, apartment = { apartmentType = nil, apartmentId = nil, } } - PlayerData.metadata["phonedata"] = PlayerData.metadata["phonedata"] ~= nil and PlayerData.metadata["phonedata"] or { + PlayerData.metadata['phonedata'] = PlayerData.metadata['phonedata'] or { SerialNumber = QBCore.Player.CreateSerialNumber(), InstalledApps = {}, } - - PlayerData.job = PlayerData.job ~= nil and PlayerData.job or {} - PlayerData.job.name = PlayerData.job.name ~= nil and PlayerData.job.name or "unemployed" - PlayerData.job.label = PlayerData.job.label ~= nil and PlayerData.job.label or "Civilian" - PlayerData.job.payment = PlayerData.job.payment ~= nil and PlayerData.job.payment or 10 - PlayerData.job.onduty = PlayerData.job.onduty ~= nil and PlayerData.job.onduty or true - -- Added for grade system - PlayerData.job.isboss = PlayerData.job.isboss ~= nil and PlayerData.job.isboss or false - PlayerData.job.grade = PlayerData.job.grade ~= nil and PlayerData.job.grade or {} - PlayerData.job.grade.name = PlayerData.job.grade.name ~= nil and PlayerData.job.grade.name or "Freelancer" - PlayerData.job.grade.level = PlayerData.job.grade.level ~= nil and PlayerData.job.grade.level or 0 - - PlayerData.gang = PlayerData.gang ~= nil and PlayerData.gang or {} - PlayerData.gang.name = PlayerData.gang.name ~= nil and PlayerData.gang.name or "none" - PlayerData.gang.label = PlayerData.gang.label ~= nil and PlayerData.gang.label or "No Gang Affiliaton" - -- Added for grade system - PlayerData.gang.isboss = PlayerData.gang.isboss ~= nil and PlayerData.gang.isboss or false - PlayerData.gang.grade = PlayerData.gang.grade ~= nil and PlayerData.gang.grade or {} - PlayerData.gang.grade.name = PlayerData.gang.grade.name ~= nil and PlayerData.gang.grade.name or "none" - PlayerData.gang.grade.level = PlayerData.gang.grade.level ~= nil and PlayerData.gang.grade.level or 0 - - PlayerData.position = PlayerData.position ~= nil and PlayerData.position or QBConfig.DefaultSpawn + -- Job + PlayerData.job = PlayerData.job or {} + PlayerData.job.name = PlayerData.job.name or 'unemployed' + PlayerData.job.label = PlayerData.job.label or 'Civilian' + PlayerData.job.payment = PlayerData.job.payment or 10 + PlayerData.job.onduty = PlayerData.job.onduty or true + PlayerData.job.isboss = PlayerData.job.isboss or false + PlayerData.job.grade = PlayerData.job.grade or {} + PlayerData.job.grade.name = PlayerData.job.grade.name or 'Freelancer' + PlayerData.job.grade.level = PlayerData.job.grade.level or 0 + -- Gang + PlayerData.gang = PlayerData.gang or {} + PlayerData.gang.name = PlayerData.gang.name or 'none' + PlayerData.gang.label = PlayerData.gang.label or 'No Gang Affiliaton' + PlayerData.gang.isboss = PlayerData.gang.isboss or false + PlayerData.gang.grade = PlayerData.gang.grade or {} + PlayerData.gang.grade.name = PlayerData.gang.grade.name or 'none' + PlayerData.gang.grade.level = PlayerData.gang.grade.level or 0 + -- Other + PlayerData.position = PlayerData.position or QBConfig.DefaultSpawn PlayerData.LoggedIn = true - PlayerData = QBCore.Player.LoadInventory(PlayerData) QBCore.Player.CreatePlayer(PlayerData) end -QBCore.Player.CreatePlayer = function(PlayerData) +-- On player logout + +function QBCore.Player.Logout(source) + local src = source + TriggerClientEvent('QBCore:Client:OnPlayerUnload', src) + TriggerClientEvent('QBCore:Player:UpdatePlayerData', src) + Citizen.Wait(200) + QBCore.Players[src] = nil +end + +-- Create a new character +-- Don't touch any of this unless you know what you are doing +-- Will cause major issues! + +function QBCore.Player.CreatePlayer(PlayerData) local self = {} self.Functions = {} self.PlayerData = PlayerData self.Functions.UpdatePlayerData = function(dontUpdateChat) - TriggerClientEvent("QBCore:Player:SetPlayerData", self.PlayerData.source, self.PlayerData) + TriggerClientEvent('QBCore:Player:SetPlayerData', self.PlayerData.source, self.PlayerData) if dontUpdateChat == nil then QBCore.Commands.Refresh(self.PlayerData.source) end @@ -144,20 +159,20 @@ QBCore.Player.CreatePlayer = function(PlayerData) self.Functions.SetJob = function(job, grade) local job = job:lower() - local grade = tostring(grade) ~= nil and tostring(grade) or '0' + local grade = tostring(grade) or '0' - if QBCore.Shared.Jobs[job] ~= nil then + if QBCore.Shared.Jobs[job] then self.PlayerData.job.name = job self.PlayerData.job.label = QBCore.Shared.Jobs[job].label self.PlayerData.job.onduty = QBCore.Shared.Jobs[job].defaultDuty - + if QBCore.Shared.Jobs[job].grades[grade] then local jobgrade = QBCore.Shared.Jobs[job].grades[grade] self.PlayerData.job.grade = {} self.PlayerData.job.grade.name = jobgrade.name self.PlayerData.job.grade.level = tonumber(grade) - self.PlayerData.job.payment = jobgrade.payment ~= nil and jobgrade.payment or 30 - self.PlayerData.job.isboss = jobgrade.isboss ~= nil and jobgrade.isboss or false + self.PlayerData.job.payment = jobgrade.payment or 30 + self.PlayerData.job.isboss = jobgrade.isboss or false else self.PlayerData.job.grade = {} self.PlayerData.job.grade.name = 'No Grades' @@ -167,7 +182,7 @@ QBCore.Player.CreatePlayer = function(PlayerData) end self.Functions.UpdatePlayerData() - TriggerClientEvent("QBCore:Client:OnJobUpdate", self.PlayerData.source, self.PlayerData.job) + TriggerClientEvent('QBCore:Client:OnJobUpdate', self.PlayerData.source, self.PlayerData.job) return true end @@ -176,9 +191,9 @@ QBCore.Player.CreatePlayer = function(PlayerData) self.Functions.SetGang = function(gang, grade) local gang = gang:lower() - local grade = tostring(grade) ~= nil and tostring(grade) or '0' + local grade = tostring(grade) or '0' - if QBCore.Shared.Gangs[gang] ~= nil then + if QBCore.Shared.Gangs[gang] then self.PlayerData.gang.name = gang self.PlayerData.gang.label = QBCore.Shared.Gangs[gang].label if QBCore.Shared.Gangs[gang].grades[grade] then @@ -186,7 +201,7 @@ QBCore.Player.CreatePlayer = function(PlayerData) self.PlayerData.gang.grade = {} self.PlayerData.gang.grade.name = ganggrade.name self.PlayerData.gang.grade.level = tonumber(grade) - self.PlayerData.gang.isboss = ganggrade.isboss ~= nil and ganggrade.isboss or false + self.PlayerData.gang.isboss = ganggrade.isboss or false else self.PlayerData.gang.grade = {} self.PlayerData.gang.grade.name = 'No Grades' @@ -195,7 +210,7 @@ QBCore.Player.CreatePlayer = function(PlayerData) end self.Functions.UpdatePlayerData() - TriggerClientEvent("QBCore:Client:OnGangUpdate", self.PlayerData.source, self.PlayerData.gang) + TriggerClientEvent('QBCore:Client:OnGangUpdate', self.PlayerData.source, self.PlayerData.gang) return true end return false @@ -216,35 +231,35 @@ QBCore.Player.CreatePlayer = function(PlayerData) self.Functions.AddJobReputation = function(amount) local amount = tonumber(amount) - self.PlayerData.metadata["jobrep"][self.PlayerData.job.name] = self.PlayerData.metadata["jobrep"][self.PlayerData.job.name] + amount + self.PlayerData.metadata['jobrep'][self.PlayerData.job.name] = self.PlayerData.metadata['jobrep'][self.PlayerData.job.name] + amount self.Functions.UpdatePlayerData() end self.Functions.AddMoney = function(moneytype, amount, reason) - reason = reason ~= nil and reason or "unkown" + reason = reason or 'unknown' local moneytype = moneytype:lower() local amount = tonumber(amount) if amount < 0 then return end - if self.PlayerData.money[moneytype] ~= nil then + if self.PlayerData.money[moneytype] then self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype]+amount self.Functions.UpdatePlayerData() if amount > 100000 then - TriggerEvent("qb-log:server:CreateLog", "playermoney", "AddMoney", "lightgreen", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** $"..amount .. " ("..moneytype..") added, new "..moneytype.." balance: "..self.PlayerData.money[moneytype], true) + TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'AddMoney', 'lightgreen', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** $'..amount .. ' ('..moneytype..') added, new '..moneytype..' balance: '..self.PlayerData.money[moneytype], true) else - TriggerEvent("qb-log:server:CreateLog", "playermoney", "AddMoney", "lightgreen", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** $"..amount .. " ("..moneytype..") added, new "..moneytype.." balance: "..self.PlayerData.money[moneytype]) + TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'AddMoney', 'lightgreen', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** $'..amount .. ' ('..moneytype..') added, new '..moneytype..' balance: '..self.PlayerData.money[moneytype]) end - TriggerClientEvent("hud:client:OnMoneyChange", self.PlayerData.source, moneytype, amount, false) + TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, amount, false) return true end return false end self.Functions.RemoveMoney = function(moneytype, amount, reason) - reason = reason ~= nil and reason or "unkown" + reason = reason or 'unknown' local moneytype = moneytype:lower() local amount = tonumber(amount) if amount < 0 then return end - if self.PlayerData.money[moneytype] ~= nil then + if self.PlayerData.money[moneytype] then for _, mtype in pairs(QBCore.Config.Money.DontAllowMinus) do if mtype == moneytype then if self.PlayerData.money[moneytype] - amount < 0 then return false end @@ -253,12 +268,12 @@ QBCore.Player.CreatePlayer = function(PlayerData) self.PlayerData.money[moneytype] = self.PlayerData.money[moneytype] - amount self.Functions.UpdatePlayerData() if amount > 100000 then - TriggerEvent("qb-log:server:CreateLog", "playermoney", "RemoveMoney", "red", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** $"..amount .. " ("..moneytype..") removed, new "..moneytype.." balance: "..self.PlayerData.money[moneytype], true) + TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'RemoveMoney', 'red', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** $'..amount .. ' ('..moneytype..') removed, new '..moneytype..' balance: '..self.PlayerData.money[moneytype], true) else - TriggerEvent("qb-log:server:CreateLog", "playermoney", "RemoveMoney", "red", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** $"..amount .. " ("..moneytype..") removed, new "..moneytype.." balance: "..self.PlayerData.money[moneytype]) + TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'RemoveMoney', 'red', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** $'..amount .. ' ('..moneytype..') removed, new '..moneytype..' balance: '..self.PlayerData.money[moneytype]) end - TriggerClientEvent("hud:client:OnMoneyChange", self.PlayerData.source, moneytype, amount, true) - if moneytype == "bank" then + TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, amount, true) + if moneytype == 'bank' then TriggerClientEvent('qb-phone:client:RemoveBankMoney', self.PlayerData.source, amount) end return true @@ -267,21 +282,21 @@ QBCore.Player.CreatePlayer = function(PlayerData) end self.Functions.SetMoney = function(moneytype, amount, reason) - reason = reason ~= nil and reason or "unkown" + reason = reason or 'unknown' local moneytype = moneytype:lower() local amount = tonumber(amount) if amount < 0 then return end - if self.PlayerData.money[moneytype] ~= nil then + if self.PlayerData.money[moneytype] then self.PlayerData.money[moneytype] = amount self.Functions.UpdatePlayerData() - TriggerEvent("qb-log:server:CreateLog", "playermoney", "SetMoney", "green", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** $"..amount .. " ("..moneytype..") set, new "..moneytype.." balance: "..self.PlayerData.money[moneytype]) + TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'SetMoney', 'green', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** $'..amount .. ' ('..moneytype..') set, new '..moneytype..' balance: '..self.PlayerData.money[moneytype]) return true end return false end self.Functions.GetMoney = function(moneytype) - if moneytype ~= nil then + if moneytype then local moneytype = moneytype:lower() return self.PlayerData.money[moneytype] end @@ -291,72 +306,71 @@ QBCore.Player.CreatePlayer = function(PlayerData) self.Functions.AddItem = function(item, amount, slot, info) local totalWeight = QBCore.Player.GetTotalWeight(self.PlayerData.items) local itemInfo = QBCore.Shared.Items[item:lower()] - if itemInfo == nil then TriggerClientEvent('QBCore:Notify', source, "Item Does Not Exist", "error") return end + if itemInfo == nil then TriggerClientEvent('QBCore:Notify', source, 'Item Does Not Exist', 'error') return end local amount = tonumber(amount) - local slot = tonumber(slot) ~= nil and tonumber(slot) or QBCore.Player.GetFirstSlotByItem(self.PlayerData.items, item) - if itemInfo["type"] == "weapon" and info == nil then + local slot = tonumber(slot) or QBCore.Player.GetFirstSlotByItem(self.PlayerData.items, item) + if itemInfo['type'] == 'weapon' and info == nil then info = { serie = tostring(QBCore.Shared.RandomInt(2) .. QBCore.Shared.RandomStr(3) .. QBCore.Shared.RandomInt(1) .. QBCore.Shared.RandomStr(2) .. QBCore.Shared.RandomInt(3) .. QBCore.Shared.RandomStr(4)), } end - if (totalWeight + (itemInfo["weight"] * amount)) <= QBCore.Config.Player.MaxWeight then - if (slot ~= nil and self.PlayerData.items[slot] ~= nil) and (self.PlayerData.items[slot].name:lower() == item:lower()) and (itemInfo["type"] == "item" and not itemInfo["unique"]) then + if (totalWeight + (itemInfo['weight'] * amount)) <= QBCore.Config.Player.MaxWeight then + if (slot and self.PlayerData.items[slot]) and (self.PlayerData.items[slot].name:lower() == item:lower()) and (itemInfo['type'] == 'item' and not itemInfo['unique']) then self.PlayerData.items[slot].amount = self.PlayerData.items[slot].amount + amount self.Functions.UpdatePlayerData() - TriggerEvent("qb-log:server:CreateLog", "playerinventory", "AddItem", "green", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** got item: [slot:" ..slot.."], itemname: " .. self.PlayerData.items[slot].name .. ", added amount: " .. amount ..", new total amount: ".. self.PlayerData.items[slot].amount) + TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'AddItem', 'green', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** got item: [slot:' ..slot..'], itemname: ' .. self.PlayerData.items[slot].name .. ', added amount: ' .. amount ..', new total amount: '.. self.PlayerData.items[slot].amount) return true - elseif (not itemInfo["unique"] and slot or slot ~= nil and self.PlayerData.items[slot] == nil) then - self.PlayerData.items[slot] = {name = itemInfo["name"], amount = amount, info = info ~= nil and info or "", label = itemInfo["label"], description = itemInfo["description"] ~= nil and itemInfo["description"] or "", weight = itemInfo["weight"], type = itemInfo["type"], unique = itemInfo["unique"], useable = itemInfo["useable"], image = itemInfo["image"], shouldClose = itemInfo["shouldClose"], slot = slot, combinable = itemInfo["combinable"]} + elseif (not itemInfo['unique'] and slot or slot and self.PlayerData.items[slot] == nil) then + self.PlayerData.items[slot] = {name = itemInfo['name'], amount = amount, info = info or '', label = itemInfo['label'], description = itemInfo['description'] or '', weight = itemInfo['weight'], type = itemInfo['type'], unique = itemInfo['unique'], useable = itemInfo['useable'], image = itemInfo['image'], shouldClose = itemInfo['shouldClose'], slot = slot, combinable = itemInfo['combinable']} self.Functions.UpdatePlayerData() - TriggerEvent("qb-log:server:CreateLog", "playerinventory", "AddItem", "green", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** got item: [slot:" ..slot.."], itemname: " .. self.PlayerData.items[slot].name .. ", added amount: " .. amount ..", new total amount: ".. self.PlayerData.items[slot].amount) + TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'AddItem', 'green', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** got item: [slot:' ..slot..'], itemname: ' .. self.PlayerData.items[slot].name .. ', added amount: ' .. amount ..', new total amount: '.. self.PlayerData.items[slot].amount) return true - elseif (itemInfo["unique"]) or (not slot or slot == nil) or (itemInfo["type"] == "weapon") then + elseif (itemInfo['unique']) or (not slot or slot == nil) or (itemInfo['type'] == 'weapon') then for i = 1, QBConfig.Player.MaxInvSlots, 1 do if self.PlayerData.items[i] == nil then - self.PlayerData.items[i] = {name = itemInfo["name"], amount = amount, info = info ~= nil and info or "", label = itemInfo["label"], description = itemInfo["description"] ~= nil and itemInfo["description"] or "", weight = itemInfo["weight"], type = itemInfo["type"], unique = itemInfo["unique"], useable = itemInfo["useable"], image = itemInfo["image"], shouldClose = itemInfo["shouldClose"], slot = i, combinable = itemInfo["combinable"]} + self.PlayerData.items[i] = {name = itemInfo['name'], amount = amount, info = info or '', label = itemInfo['label'], description = itemInfo['description'] or '', weight = itemInfo['weight'], type = itemInfo['type'], unique = itemInfo['unique'], useable = itemInfo['useable'], image = itemInfo['image'], shouldClose = itemInfo['shouldClose'], slot = i, combinable = itemInfo['combinable']} self.Functions.UpdatePlayerData() - TriggerEvent("qb-log:server:CreateLog", "playerinventory", "AddItem", "green", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** got item: [slot:" ..i.."], itemname: " .. self.PlayerData.items[i].name .. ", added amount: " .. amount ..", new total amount: ".. self.PlayerData.items[i].amount) - --TriggerClientEvent('QBCore:Notify', self.PlayerData.source, itemInfo["label"].. " toegevoegd!", "success") + TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'AddItem', 'green', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** got item: [slot:' ..i..'], itemname: ' .. self.PlayerData.items[i].name .. ', added amount: ' .. amount ..', new total amount: '.. self.PlayerData.items[i].amount) + --TriggerClientEvent('QBCore:Notify', self.PlayerData.source, itemInfo['label'].. ' toegevoegd!', 'success') return true end end end else - TriggerClientEvent('QBCore:Notify', self.PlayerData.source, "Your inventory is too heavy!", "error") + TriggerClientEvent('QBCore:Notify', self.PlayerData.source, 'Your inventory is too heavy!', 'error') end return false end self.Functions.RemoveItem = function(item, amount, slot) - local itemInfo = QBCore.Shared.Items[item:lower()] local amount = tonumber(amount) local slot = tonumber(slot) - if slot ~= nil then + if slot then if self.PlayerData.items[slot].amount > amount then self.PlayerData.items[slot].amount = self.PlayerData.items[slot].amount - amount self.Functions.UpdatePlayerData() - TriggerEvent("qb-log:server:CreateLog", "playerinventory", "RemoveItem", "red", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** lost item: [slot:" ..slot.."], itemname: " .. self.PlayerData.items[slot].name .. ", removed amount: " .. amount ..", new total amount: ".. self.PlayerData.items[slot].amount) + TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** lost item: [slot:' ..slot..'], itemname: ' .. self.PlayerData.items[slot].name .. ', removed amount: ' .. amount ..', new total amount: '.. self.PlayerData.items[slot].amount) return true else self.PlayerData.items[slot] = nil self.Functions.UpdatePlayerData() - TriggerEvent("qb-log:server:CreateLog", "playerinventory", "RemoveItem", "red", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** lost item: [slot:" ..slot.."], itemname: " .. item .. ", removed amount: " .. amount ..", item removed") + TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** lost item: [slot:' ..slot..'], itemname: ' .. item .. ', removed amount: ' .. amount ..', item removed') return true end else local slots = QBCore.Player.GetSlotsByItem(self.PlayerData.items, item) local amountToRemove = amount - if slots ~= nil then + if slots then for _, slot in pairs(slots) do if self.PlayerData.items[slot].amount > amountToRemove then self.PlayerData.items[slot].amount = self.PlayerData.items[slot].amount - amountToRemove self.Functions.UpdatePlayerData() - TriggerEvent("qb-log:server:CreateLog", "playerinventory", "RemoveItem", "red", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** lost item: [slot:" ..slot.."], itemname: " .. self.PlayerData.items[slot].name .. ", removed amount: " .. amount ..", new total amount: ".. self.PlayerData.items[slot].amount) + TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** lost item: [slot:' ..slot..'], itemname: ' .. self.PlayerData.items[slot].name .. ', removed amount: ' .. amount ..', new total amount: '.. self.PlayerData.items[slot].amount) return true elseif self.PlayerData.items[slot].amount == amountToRemove then self.PlayerData.items[slot] = nil self.Functions.UpdatePlayerData() - TriggerEvent("qb-log:server:CreateLog", "playerinventory", "RemoveItem", "red", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** lost item: [slot:" ..slot.."], itemname: " .. item .. ", removed amount: " .. amount ..", item removed") + TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'RemoveItem', 'red', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** lost item: [slot:' ..slot..'], itemname: ' .. item .. ', removed amount: ' .. amount ..', item removed') return true end end @@ -368,19 +382,19 @@ QBCore.Player.CreatePlayer = function(PlayerData) self.Functions.SetInventory = function(items, dontUpdateChat) self.PlayerData.items = items self.Functions.UpdatePlayerData(dontUpdateChat) - TriggerEvent("qb-log:server:CreateLog", "playerinventory", "SetInventory", "blue", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** items set: " .. json.encode(items)) + TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'SetInventory', 'blue', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** items set: ' .. json.encode(items)) end self.Functions.ClearInventory = function() self.PlayerData.items = {} self.Functions.UpdatePlayerData() - TriggerEvent("qb-log:server:CreateLog", "playerinventory", "ClearInventory", "red", "**"..GetPlayerName(self.PlayerData.source) .. " (citizenid: "..self.PlayerData.citizenid.." | id: "..self.PlayerData.source..")** inventory cleared") + TriggerEvent('qb-log:server:CreateLog', 'playerinventory', 'ClearInventory', 'red', '**'..GetPlayerName(self.PlayerData.source) .. ' (citizenid: '..self.PlayerData.citizenid..' | id: '..self.PlayerData.source..')** inventory cleared') end self.Functions.GetItemByName = function(item) local item = tostring(item):lower() local slot = QBCore.Player.GetFirstSlotByItem(self.PlayerData.items, item) - if slot ~= nil then + if slot then return self.PlayerData.items[slot] end return nil @@ -391,7 +405,7 @@ QBCore.Player.CreatePlayer = function(PlayerData) local items = {} local slots = QBCore.Player.GetSlotsByItem(self.PlayerData.items, item) for _, slot in pairs(slots) do - if slot ~= nil then + if slot then table.insert(items, self.PlayerData.items[slot]) end end @@ -407,7 +421,7 @@ QBCore.Player.CreatePlayer = function(PlayerData) local item = tostring(cardType):lower() local slots = QBCore.Player.GetSlotsByItem(self.PlayerData.items, item) for _, slot in pairs(slots) do - if slot ~= nil then + if slot then if self.PlayerData.items[slot].info.cardNumber == cardNumber then return slot end @@ -418,7 +432,7 @@ QBCore.Player.CreatePlayer = function(PlayerData) self.Functions.GetItemBySlot = function(slot) local slot = tonumber(slot) - if self.PlayerData.items[slot] ~= nil then + if self.PlayerData.items[slot] then return self.PlayerData.items[slot] end return nil @@ -436,106 +450,91 @@ QBCore.Player.CreatePlayer = function(PlayerData) self.Functions.UpdatePlayerData() end -QBCore.Player.Save = function(source) - local PlayerData = QBCore.Players[source].PlayerData - if PlayerData ~= nil then - -- TODO: Merge these 3 queries into 1 with an on duplicate (citizenid isn't primary so https://stackoverflow.com/a/33495408/3200040 might need to be used) - local result = exports.oxmysql:fetchSync('SELECT * FROM players WHERE citizenid = ?', { PlayerData.citizenid }) - if result[1] == nil then - exports.oxmysql:insert('INSERT INTO players (citizenid, cid, license, name, money, charinfo, job, gang, position, metadata) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', { - PlayerData.citizenid, - tonumber(PlayerData.cid), - PlayerData.license, - PlayerData.name, - json.encode(PlayerData.money), - json.encode(PlayerData.charinfo), - json.encode(PlayerData.job), - json.encode(PlayerData.gang), - json.encode(PlayerData.position), - json.encode(PlayerData.metadata) - }) - else - exports.oxmysql:execute('UPDATE players SET license = ?, name = ?, money = ?, charinfo = ?, job = ?, gang = ?, position = ?, metadata = ? WHERE citizenid = ?', { - PlayerData.license, - PlayerData.name, - json.encode(PlayerData.money), - json.encode(PlayerData.charinfo), - json.encode(PlayerData.job), - json.encode(PlayerData.gang), - json.encode(PlayerData.position), - json.encode(PlayerData.metadata), - PlayerData.citizenid - }) - end - QBCore.Player.SaveInventory(source) - QBCore.ShowSuccess(GetCurrentResourceName(), PlayerData.name .." PLAYER SAVED!") +-- Save player info to database (make sure citizenid is the primary key in your database) + +function QBCore.Player.Save(source) + local src = source + local PlayerData = QBCore.Players[src].PlayerData + if PlayerData then + exports.oxmysql:insert('INSERT INTO players (citizenid, cid, license, name, money, charinfo, job, gang, position, metadata) VALUES (:citizenid, :cid, :license, :name, :money, :charinfo, :job, :gang, :position, :metadata) ON DUPLICATE KEY UPDATE cid = :cid, name = :name, money = :money, charinfo = :charinfo, job = :job, gang = :gang, position = :position, metadata = :metadata', { + citizenid = PlayerData.citizenid, + cid = tonumber(PlayerData.cid), + license = PlayerData.license, + name = PlayerData.name, + money = json.encode(PlayerData.money), + charinfo = json.encode(PlayerData.charinfo), + job = json.encode(PlayerData.job), + gang = json.encode(PlayerData.gang), + position = json.encode(PlayerData.position), + metadata = json.encode(PlayerData.metadata) + }) + QBCore.Player.SaveInventory(src) + QBCore.ShowSuccess(GetCurrentResourceName(), PlayerData.name ..' PLAYER SAVED!') else - QBCore.ShowError(GetCurrentResourceName(), "ERROR QBCORE.PLAYER.SAVE - PLAYERDATA IS EMPTY!") + QBCore.ShowError(GetCurrentResourceName(), 'ERROR QBCORE.PLAYER.SAVE - PLAYERDATA IS EMPTY!') end end -QBCore.Player.Logout = function(source) - TriggerClientEvent('QBCore:Client:OnPlayerUnload', source) - TriggerClientEvent("QBCore:Player:UpdatePlayerData", source) - Citizen.Wait(200) - QBCore.Players[source] = nil -end +-- Delete character -local playertables = { - {table = "players"}, - {table = "apartments"}, - {table = "bank_accounts"}, - {table = "crypto_transactions"}, - {table = "phone_invoices"}, - {table = "phone_messages"}, - {table = "playerskins"}, - {table = "player_boats"}, - {table = "player_contacts"}, - {table = "player_houses"}, - {table = "player_mails"}, - {table = "player_outfits"}, - {table = "player_vehicles"} +local playertables = { -- Add tables as needed + {table = 'players'}, + {table = 'apartments'}, + {table = 'bank_accounts'}, + {table = 'crypto_transactions'}, + {table = 'phone_invoices'}, + {table = 'phone_messages'}, + {table = 'playerskins'}, + {table = 'player_boats'}, + {table = 'player_contacts'}, + {table = 'player_houses'}, + {table = 'player_mails'}, + {table = 'player_outfits'}, + {table = 'player_vehicles'} } -QBCore.Player.DeleteCharacter = function(source, citizenid) - local license = QBCore.Functions.GetIdentifier(source, 'license') +function QBCore.Player.DeleteCharacter(source, citizenid) + local src = source + local license = QBCore.Functions.GetIdentifier(src, 'license') local result = exports.oxmysql:scalarSync('SELECT license FROM players where citizenid = ?', { citizenid }) if license == result then for k,v in pairs(playertables) do exports.oxmysql:execute('DELETE FROM '..v.table..' WHERE citizenid = ?', { citizenid }) end - TriggerEvent("qb-log:server:CreateLog", "joinleave", "Character Deleted", "red", "**".. GetPlayerName(source) .. "** ("..QBCore.Functions.GetIdentifier(source, 'license')..") deleted **"..citizenid.."**..") + TriggerEvent('qb-log:server:CreateLog', 'joinleave', 'Character Deleted', 'red', '**'.. GetPlayerName(src) .. '** '..license..' deleted **'..citizenid..'**..') else - DropPlayer(source, 'You Have Been Kicked For Exploitation') - TriggerEvent("qb-log:server:CreateLog", "anticheat", "Anti-Cheat", "white", GetPlayerName(source).." Has Been Dropped For Character Deletion Exploit", false) + DropPlayer(src, 'You Have Been Kicked For Exploitation') + TriggerEvent('qb-log:server:CreateLog', 'anticheat', 'Anti-Cheat', 'white', GetPlayerName(src)..' Has Been Dropped For Character Deletion Exploit', false) end end +-- Inventory + QBCore.Player.LoadInventory = function(PlayerData) PlayerData.items = {} - local result = exports.oxmysql:fetchSync('SELECT * FROM players WHERE citizenid = ?', { PlayerData.citizenid }) - if result[1] ~= nil then - if result[1].inventory ~= nil then + local result = exports.oxmysql:fetchSync('SELECT * FROM players WHERE citizenid = ?', {PlayerData.citizenid}) + if result[1] then + if result[1].inventory then plyInventory = json.decode(result[1].inventory) - if next(plyInventory) ~= nil then + if next(plyInventory) then for _, item in pairs(plyInventory) do - if item ~= nil then + if item then local itemInfo = QBCore.Shared.Items[item.name:lower()] - if itemInfo ~= nil then + if itemInfo then PlayerData.items[item.slot] = { - name = itemInfo["name"], - amount = item.amount, - info = item.info ~= nil and item.info or "", - label = itemInfo["label"], - description = itemInfo["description"] ~= nil and itemInfo["description"] or "", - weight = itemInfo["weight"], - type = itemInfo["type"], - unique = itemInfo["unique"], - useable = itemInfo["useable"], - image = itemInfo["image"], - shouldClose = itemInfo["shouldClose"], - slot = item.slot, - combinable = itemInfo["combinable"] + name = itemInfo['name'], + amount = item.amount, + info = item.info or '', + label = itemInfo['label'], + description = itemInfo['description'] or '', + weight = itemInfo['weight'], + type = itemInfo['type'], + unique = itemInfo['unique'], + useable = itemInfo['useable'], + image = itemInfo['image'], + shouldClose = itemInfo['shouldClose'], + slot = item.slot, + combinable = itemInfo['combinable'] } end end @@ -547,13 +546,14 @@ QBCore.Player.LoadInventory = function(PlayerData) end QBCore.Player.SaveInventory = function(source) - if QBCore.Players[source] ~= nil then - local PlayerData = QBCore.Players[source].PlayerData + local src = source + if QBCore.Players[src] then + local PlayerData = QBCore.Players[src].PlayerData local items = PlayerData.items local ItemsJson = {} - if items ~= nil and next(items) ~= nil then + if items and next(items) then for slot, item in pairs(items) do - if items[slot] ~= nil then + if items[slot] then table.insert(ItemsJson, { name = item.name, amount = item.amount, @@ -570,9 +570,11 @@ QBCore.Player.SaveInventory = function(source) end end -QBCore.Player.GetTotalWeight = function(items) +-- Util Functions + +function QBCore.Player.GetTotalWeight(items) local weight = 0 - if items ~= nil then + if items then for slot, item in pairs(items) do weight = weight + (item.weight * item.amount) end @@ -580,9 +582,9 @@ QBCore.Player.GetTotalWeight = function(items) return tonumber(weight) end -QBCore.Player.GetSlotsByItem = function(items, itemName) +function QBCore.Player.GetSlotsByItem(items, itemName) local slotsFound = {} - if items ~= nil then + if items then for slot, item in pairs(items) do if item.name:lower() == itemName:lower() then table.insert(slotsFound, slot) @@ -592,8 +594,8 @@ QBCore.Player.GetSlotsByItem = function(items, itemName) return slotsFound end -QBCore.Player.GetFirstSlotByItem = function(items, itemName) - if items ~= nil then +function QBCore.Player.GetFirstSlotByItem(items, itemName) + if items then for slot, item in pairs(items) do if item.name:lower() == itemName:lower() then return tonumber(slot) @@ -603,10 +605,9 @@ QBCore.Player.GetFirstSlotByItem = function(items, itemName) return nil end -QBCore.Player.CreateCitizenId = function() +function QBCore.Player.CreateCitizenId() local UniqueFound = false local CitizenId = nil - while not UniqueFound do CitizenId = tostring(QBCore.Shared.RandomStr(3) .. QBCore.Shared.RandomInt(5)):upper() local result = exports.oxmysql:fetchSync('SELECT COUNT(*) as count FROM players WHERE citizenid = ?', { CitizenId }) @@ -617,7 +618,7 @@ QBCore.Player.CreateCitizenId = function() return CitizenId end -QBCore.Player.CreateFingerId = function() +function QBCore.Player.CreateFingerId() local UniqueFound = false local FingerId = nil while not UniqueFound do @@ -631,11 +632,11 @@ QBCore.Player.CreateFingerId = function() return FingerId end -QBCore.Player.CreateWalletId = function() +function QBCore.Player.CreateWalletId() local UniqueFound = false local WalletId = nil while not UniqueFound do - WalletId = "QB-"..math.random(11111111, 99999999) + WalletId = 'QB-'..math.random(11111111, 99999999) local query = '%'..WalletId..'%' local result = exports.oxmysql:fetchSync('SELECT COUNT(*) as count FROM players WHERE metadata LIKE ?', { query }) if result[1].count == 0 then @@ -645,10 +646,9 @@ QBCore.Player.CreateWalletId = function() return WalletId end -QBCore.Player.CreateSerialNumber = function() +function QBCore.Player.CreateSerialNumber() local UniqueFound = false local SerialNumber = nil - while not UniqueFound do SerialNumber = math.random(11111111, 99999999) local query = '%'..SerialNumber..'%' @@ -660,4 +660,4 @@ QBCore.Player.CreateSerialNumber = function() return SerialNumber end -PaycheckLoop() +PaycheckLoop() -- This just starts the paycheck system \ No newline at end of file diff --git a/shared.lua b/shared.lua index 0826457..adac62c 100644 --- a/shared.lua +++ b/shared.lua @@ -7,7 +7,7 @@ for i = 48, 57 do table.insert(NumberCharset, string.char(i)) end for i = 65, 90 do table.insert(StringCharset, string.char(i)) end for i = 97, 122 do table.insert(StringCharset, string.char(i)) end -QBShared.RandomStr = function(length) -- QBShared.RandomStr falls under GPL License here: [esxlicense]/LICENSE +QBShared.RandomStr = function(length) if length > 0 then return QBShared.RandomStr(length-1) .. StringCharset[math.random(1, #StringCharset)] else @@ -37,553 +37,553 @@ QBShared.SplitStr = function(str, delimiter) end QBShared.StarterItems = { - ["phone"] = {amount = 1, item = "phone"}, - ["id_card"] = {amount = 1, item = "id_card"}, - ["driver_license"] = {amount = 1, item = "driver_license"}, + ['phone'] = {amount = 1, item = 'phone'}, + ['id_card'] = {amount = 1, item = 'id_card'}, + ['driver_license'] = {amount = 1, item = 'driver_license'}, } QBShared.Items = { -- WEAPONS - ["weapon_unarmed"] = {["name"] = "weapon_unarmed", ["label"] = "Fists", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "placeholder.png", ["unique"] = true, ["useable"] = false, ["description"] = "Fisticuffs"}, - ["weapon_knife"] = {["name"] = "weapon_knife", ["label"] = "Knife", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_knife.png", ["unique"] = true, ["useable"] = false, ["description"] = "An instrument composed of a blade fixed into a handle, used for cutting or as a weapon"}, - ["weapon_nightstick"] = {["name"] = "weapon_nightstick", ["label"] = "Nightstick", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_nightstick.png", ["unique"] = true, ["useable"] = false, ["description"] = "A police officer's club or billy"}, - ["weapon_hammer"] = {["name"] = "weapon_hammer", ["label"] = "Hammer", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_hammer.png", ["unique"] = true, ["useable"] = false, ["description"] = "Used for jobs such as breaking things (legs) and driving in nails"}, - ["weapon_bat"] = {["name"] = "weapon_bat", ["label"] = "Bat", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_bat.png", ["unique"] = true, ["useable"] = false, ["description"] = "Used for hitting a ball in sports (or other things)"}, - ["weapon_golfclub"] = {["name"] = "weapon_golfclub", ["label"] = "Golfclub", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_golfclub.png", ["unique"] = true, ["useable"] = false, ["description"] = "A club used to hit the ball in golf"}, - ["weapon_crowbar"] = {["name"] = "weapon_crowbar", ["label"] = "Crowbar", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_crowbar.png", ["unique"] = true, ["useable"] = false, ["description"] = "An iron bar with a flattened end, used as a lever"}, - ["weapon_pistol"] = {["name"] = "weapon_pistol", ["label"] = "Walther P99", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_pistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A small firearm designed to be held in one hand"}, - ["weapon_pistol_mk2"] = {["name"] = "weapon_pistol_mk2", ["label"] = "Pistol Mk II", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_pistol_mk2.png", ["unique"] = true, ["useable"] = false, ["description"] = "An upgraded small firearm designed to be held in one hand"}, - ["weapon_combatpistol"] = {["name"] = "weapon_combatpistol", ["label"] = "Combat Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_combatpistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A combat version small firearm designed to be held in one hand"}, - ["weapon_appistol"] = {["name"] = "weapon_appistol", ["label"] = "AP Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_appistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A small firearm designed to be held in one hand that is automatic"}, - ["weapon_pistol50"] = {["name"] = "weapon_pistol50", ["label"] = "Pistol .50 Cal", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_pistol50.png", ["unique"] = true, ["useable"] = false, ["description"] = "A .50 caliber firearm designed to be held with both hands"}, - ["weapon_microsmg"] = {["name"] = "weapon_microsmg", ["label"] = "Micro SMG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SMG", ["image"] = "weapon_microsmg.png", ["unique"] = true, ["useable"] = false, ["description"] = "A handheld lightweight machine gun"}, - ["weapon_smg"] = {["name"] = "weapon_smg", ["label"] = "SMG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SMG", ["image"] = "weapon_smg.png", ["unique"] = true, ["useable"] = false, ["description"] = "A handheld lightweight machine gun"}, - ["weapon_assaultsmg"] = {["name"] = "weapon_assaultsmg", ["label"] = "Assault SMG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SMG", ["image"] = "weapon_assaultsmg.png", ["unique"] = true, ["useable"] = false, ["description"] = "An assault version of a handheld lightweight machine gun"}, - ["weapon_assaultrifle"] = {["name"] = "weapon_assaultrifle", ["label"] = "Assault Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_assaultrifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A rapid-fire, magazine-fed automatic rifle designed for infantry use"}, - ["weapon_carbinerifle"] = {["name"] = "weapon_carbinerifle", ["label"] = "Carbine Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_carbinerifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A lightweight automatic rifle"}, - ["weapon_advancedrifle"] = {["name"] = "weapon_advancedrifle", ["label"] = "Advanced Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_advancedrifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "An assault version of a rapid-fire, magazine-fed automatic rifle designed for infantry use"}, - ["weapon_mg"] = {["name"] = "weapon_mg", ["label"] = "Machinegun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_MG", ["image"] = "weapon_mg.png", ["unique"] = true, ["useable"] = false, ["description"] = "An automatic gun that fires bullets in rapid succession for as long as the trigger is pressed"}, - ["weapon_combatmg"] = {["name"] = "weapon_combatmg", ["label"] = "Combat MG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_MG", ["image"] = "weapon_combatmg.png", ["unique"] = true, ["useable"] = false, ["description"] = "A combat version of an automatic gun that fires bullets in rapid succession for as long as the trigger is pressed"}, - ["weapon_pumpshotgun"] = {["name"] = "weapon_pumpshotgun", ["label"] = "Pump Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_pumpshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A pump-action smoothbore gun for firing small shot at short range"}, - ["weapon_sawnoffshotgun"] = {["name"] = "weapon_sawnoffshotgun", ["label"] = "Sawn-off Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_sawnoffshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A sawn-off smoothbore gun for firing small shot at short range"}, - ["weapon_assaultshotgun"] = {["name"] = "weapon_assaultshotgun", ["label"] = "Assault Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_assaultshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "An assault version of asmoothbore gun for firing small shot at short range"}, - ["weapon_bullpupshotgun"] = {["name"] = "weapon_bullpupshotgun", ["label"] = "Bullpup Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_bullpupshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A compact smoothbore gun for firing small shot at short range"}, - ["weapon_stungun"] = {["name"] = "weapon_stungun", ["label"] = "Taser", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_stungun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A weapon firing barbs attached by wires to batteries, causing temporary paralysis"}, - ["weapon_sniperrifle"] = {["name"] = "weapon_sniperrifle", ["label"] = "Sniper Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SNIPER", ["image"] = "weapon_sniperrifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A high-precision, long-range rifle"}, - ["weapon_heavysniper"] = {["name"] = "weapon_heavysniper", ["label"] = "Heavy Sniper", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SNIPER", ["image"] = "weapon_heavysniper.png", ["unique"] = true, ["useable"] = false, ["description"] = "An upgraded high-precision, long-range rifle"}, - ["weapon_remotesniper"] = {["name"] = "weapon_remotesniper", ["label"] = "Remote Sniper", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SNIPER_REMOTE", ["image"] = "weapon_remotesniper.png", ["unique"] = true, ["useable"] = false, ["description"] = "A portable high-precision, long-range rifle"}, - ["weapon_grenadelauncher"] = {["name"] = "weapon_grenadelauncher", ["label"] = "Grenade Launcher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_GRENADELAUNCHER", ["image"] = "weapon_grenadelauncher.png", ["unique"] = true, ["useable"] = false, ["description"] = "A weapon that fires a specially-designed large-caliber projectile, often with an explosive, smoke or gas warhead"}, - ["weapon_grenadelauncher_smoke"] = {["name"] = "weapon_grenadelauncher_smoke", ["label"] = "Smoke Grenade Launcher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_GRENADELAUNCHER", ["image"] = "weapon_smokegrenade.png", ["unique"] = true, ["useable"] = false, ["description"] = "A bomb that produces a lot of smoke when it explodes"}, - ["weapon_rpg"] = {["name"] = "weapon_rpg", ["label"] = "RPG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RPG", ["image"] = "weapon_rpg.png", ["unique"] = true, ["useable"] = false, ["description"] = "A rocket-propelled grenade launcher"}, - ["weapon_minigun"] = {["name"] = "weapon_minigun", ["label"] = "Minigun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_MINIGUN", ["image"] = "weapon_minigun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A portable machine gun consisting of a rotating cluster of six barrels and capable of variable rates of fire of up to 6,000 rounds per minute"}, - ["weapon_grenade"] = {["name"] = "weapon_grenade", ["label"] = "Grenade", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_grenade.png", ["unique"] = true, ["useable"] = false, ["description"] = "A handheld throwable bomb"}, - ["weapon_stickybomb"] = {["name"] = "weapon_stickybomb", ["label"] = "C4", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_stickybomb.png", ["unique"] = true, ["useable"] = false, ["description"] = "An explosive charge covered with an adhesive that when thrown against an object sticks until it explodes"}, - ["weapon_smokegrenade"] = {["name"] = "weapon_smokegrenade", ["label"] = "Smoke Grenade", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_c4.png", ["unique"] = true, ["useable"] = false, ["description"] = "An explosive charge that can be remotely detonated"}, - ["weapon_bzgas"] = {["name"] = "weapon_bzgas", ["label"] = "BZ Gas", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_bzgas.png", ["unique"] = true, ["useable"] = false, ["description"] = "A cannister of gas that causes extreme pain"}, - ["weapon_molotov"] = {["name"] = "weapon_molotov", ["label"] = "Molotov", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_molotov.png", ["unique"] = true, ["useable"] = false, ["description"] = "A crude bomb made of a bottle filled with a flammable liquid and fitted with a wick for lighting"}, - ["weapon_fireextinguisher"] = {["name"] = "weapon_fireextinguisher", ["label"] = "Fire Extinguisher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_fireextinguisher.png", ["unique"] = true, ["useable"] = false, ["description"] = "A portable device that discharges a jet of water, foam, gas, or other material to extinguish a fire"}, - ["weapon_petrolcan"] = {["name"] = "weapon_petrolcan", ["label"] = "Petrol Can", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PETROLCAN", ["image"] = "weapon_petrolcan.png", ["unique"] = true, ["useable"] = false, ["description"] = "A robust liquid container made from pressed steel"}, - ["weapon_briefcase"] = {["name"] = "weapon_briefcase", ["label"] = "Briefcase", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_briefcase.png", ["unique"] = true, ["useable"] = false, ["description"] = "A briefcase for storing important documents"}, - ["weapon_briefcase_02"] = {["name"] = "weapon_briefcase_02", ["label"] = "Suitcase", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_briefcase2.png", ["unique"] = true, ["useable"] = false, ["description"] = "Wonderfull for nice vacation to Liberty City"}, - ["weapon_ball"] = {["name"] = "weapon_ball", ["label"] = "Ball", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_BALL", ["image"] = "weapon_ball.png", ["unique"] = true, ["useable"] = false, ["description"] = "A solid or hollow spherical or egg-shaped object that is kicked, thrown, or hit in a game"}, - ["weapon_flare"] = {["name"] = "weapon_flare", ["label"] = "Flare pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_FLARE", ["image"] = "weapon_flare.png", ["unique"] = true, ["useable"] = false, ["description"] = "A small pyrotechnic devices used for illumination and signalling"}, - ["weapon_snspistol"] = {["name"] = "weapon_snspistol", ["label"] = "SNS Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_snspistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A very small firearm designed to be easily concealed"}, - ["weapon_bottle"] = {["name"] = "weapon_bottle", ["label"] = "Broken Bottle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_bottle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A broken bottle"}, - ["weapon_gusenberg"] = {["name"] = "weapon_gusenberg", ["label"] = "Thompson SMG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_MG", ["image"] = "weapon_gusenberg.png", ["unique"] = true, ["useable"] = false, ["description"] = "An automatic rifle commonly referred to as a tommy gun"}, - ["weapon_specialcarbine"] = {["name"] = "weapon_specialcarbine", ["label"] = "Special Carbine", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_specialcarbine.png", ["unique"] = true, ["useable"] = false, ["description"] = "An extremely versatile assault rifle for any combat situation"}, - ["weapon_heavypistol"] = {["name"] = "weapon_heavypistol", ["label"] = "Heavy Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_heavypistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A hefty firearm designed to be held in one hand (or attempted)"}, - ["weapon_bullpuprifle"] = {["name"] = "weapon_bullpuprifle", ["label"] = "Bullpup Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_bullpuprifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A compact automatic assault rifle"}, - ["weapon_dagger"] = {["name"] = "weapon_dagger", ["label"] = "Dagger", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_dagger.png", ["unique"] = true, ["useable"] = false, ["description"] = "A short knife with a pointed and edged blade, used as a weapon"}, - ["weapon_vintagepistol"] = {["name"] = "weapon_vintagepistol", ["label"] = "Vintage Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_vintagepistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "An antique firearm designed to be held in one hand"}, - ["weapon_firework"] = {["name"] = "weapon_firework", ["label"] = "Firework Launcher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_firework.png", ["unique"] = true, ["useable"] = false, ["description"] = "A device containing gunpowder and other combustible chemicals that causes a spectacular explosion when ignited"}, - ["weapon_musket"] = {["name"] = "weapon_musket", ["label"] = "Musket", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_musket.png", ["unique"] = true, ["useable"] = false, ["description"] = "An infantryman's light gun with a long barrel, typically smooth-bored, muzzleloading, and fired from the shoulder"}, - ["weapon_heavyshotgun"] = {["name"] = "weapon_heavyshotgun", ["label"] = "Heavy Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_heavyshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A large smoothbore gun for firing small shot at short range"}, - ["weapon_marksmanrifle"] = {["name"] = "weapon_marksmanrifle", ["label"] = "Marksman Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SNIPER", ["image"] = "weapon_marksmanrifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A very accurate single-fire rifle"}, - ["weapon_hominglauncher"] = {["name"] = "weapon_hominglauncher", ["label"] = "Homing Launcher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_STINGER", ["image"] = "weapon_hominglauncher.png", ["unique"] = true, ["useable"] = false, ["description"] = "A weapon fitted with an electronic device that enables it to find and hit a target"}, - ["weapon_proxmine"] = {["name"] = "weapon_proxmine", ["label"] = "Proxmine Grenade", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_proximitymine.png", ["unique"] = true, ["useable"] = false, ["description"] = "A bomb placed on the ground that detonates when going within its proximity"}, - ["weapon_snowball"] = {["name"] = "weapon_snowball", ["label"] = "Snowball", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_snowball.png", ["unique"] = true, ["useable"] = false, ["description"] = "A ball of packed snow, especially one made for throwing at other people for fun"}, - ["weapon_flaregun"] = {["name"] = "weapon_flaregun", ["label"] = "Flare Gun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_FLARE", ["image"] = "weapon_flaregun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A handgun for firing signal rockets"}, - ["weapon_garbagebag"] = {["name"] = "weapon_garbagebag", ["label"] = "Garbage Bag", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_garbagebag.png", ["unique"] = true, ["useable"] = false, ["description"] = "A garbage bag"}, - ["weapon_handcuffs"] = {["name"] = "weapon_handcuffs", ["label"] = "Handcuffs", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_handcuffs.png", ["unique"] = true, ["useable"] = false, ["description"] = "A pair of lockable linked metal rings for securing a prisoner's wrists"}, - ["weapon_combatpdw"] = {["name"] = "weapon_combatpdw", ["label"] = "Combat PDW", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SMG", ["image"] = "weapon_combatpdw.png", ["unique"] = true, ["useable"] = false, ["description"] = "A combat version of a handheld lightweight machine gun"}, - ["weapon_marksmanpistol"] = {["name"] = "weapon_marksmanpistol", ["label"] = "Marksman Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_marksmanpistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A very accurate small firearm designed to be held in one hand"}, - ["weapon_knuckle"] = {["name"] = "weapon_knuckle", ["label"] = "Knuckle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_knuckle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A metal guard worn over the knuckles in fighting, especially to increase the effect of the blows"}, - ["weapon_hatchet"] = {["name"] = "weapon_hatchet", ["label"] = "Hatchet", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_hatchet.png", ["unique"] = true, ["useable"] = false, ["description"] = "A small axe with a short handle for use in one hand"}, - ["weapon_railgun"] = {["name"] = "weapon_railgun", ["label"] = "Railgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_railgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A weapon that uses electromagnetic force to launch high velocity projectiles"}, - ["weapon_machete"] = {["name"] = "weapon_machete", ["label"] = "Machete", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_machete.png", ["unique"] = true, ["useable"] = false, ["description"] = "A broad, heavy knife used as a weapon"}, - ["weapon_machinepistol"] = {["name"] = "weapon_machinepistol", ["label"] = "Tec-9", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_machinepistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A self-loading pistol capable of burst or fully automatic fire"}, - ["weapon_switchblade"] = {["name"] = "weapon_switchblade", ["label"] = "Switchblade", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_switchblade.png", ["unique"] = true, ["useable"] = false, ["description"] = "A knife with a blade that springs out from the handle when a button is pressed"}, - ["weapon_revolver"] = {["name"] = "weapon_revolver", ["label"] = "Revolver", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_revolver.png", ["unique"] = true, ["useable"] = false, ["description"] = "A pistol with revolving chambers enabling several shots to be fired without reloading"}, - ["weapon_dbshotgun"] = {["name"] = "weapon_dbshotgun", ["label"] = "Double-barrel Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_dbshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A shotgun with two parallel barrels, allowing two single shots to be fired in quick succession"}, - ["weapon_compactrifle"] = {["name"] = "weapon_compactrifle", ["label"] = "Compact Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_compactrifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A compact version of an assault rifle"}, - ["weapon_autoshotgun"] = {["name"] = "weapon_autoshotgun", ["label"] = "Auto Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_autoshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A shotgun capable of rapid continous fire"}, - ["weapon_battleaxe"] = {["name"] = "weapon_battleaxe", ["label"] = "Battle Axe", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_battleaxe.png", ["unique"] = true, ["useable"] = false, ["description"] = "A large broad-bladed axe used in ancient warfare"}, - ["weapon_compactlauncher"] = {["name"] = "weapon_compactlauncher", ["label"] = "Compact Launcher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_compactlauncher.png", ["unique"] = true, ["useable"] = false, ["description"] = "A compact grenade launcher"}, - ["weapon_minismg"] = {["name"] = "weapon_minismg", ["label"] = "Mini SMG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SMG", ["image"] = "weapon_minismg.png", ["unique"] = true, ["useable"] = false, ["description"] = "A mini handheld lightweight machine gun"}, - ["weapon_pipebomb"] = {["name"] = "weapon_pipebomb", ["label"] = "Pipe Bomb", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_pipebomb.png", ["unique"] = true, ["useable"] = false, ["description"] = "A homemade bomb, the components of which are contained in a pipe"}, - ["weapon_poolcue"] = {["name"] = "weapon_poolcue", ["label"] = "Poolcue", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_poolcue.png", ["unique"] = true, ["useable"] = false, ["description"] = "A stick used to strike a ball, usually the cue ball (or other things)"}, - ["weapon_wrench"] = {["name"] = "weapon_wrench", ["label"] = "Wrench", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_wrench.png", ["unique"] = true, ["useable"] = false, ["description"] = "A tool used for gripping and turning nuts, bolts, pipes, etc"}, - ["weapon_bread"] = {["name"] = "weapon_bread", ["label"] = "Baquette", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "baquette.png", ["unique"] = true, ["useable"] = false, ["description"] = "Bread...?"}, - ["weapon_flashlight"] = {["name"] = "weapon_flashlight", ["label"] = "Flashlight", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_flashlight.png", ["unique"] = true, ["useable"] = false, ["description"] = "A battery-operated portable light"}, + ['weapon_unarmed'] = {['name'] = 'weapon_unarmed', ['label'] = 'Fists', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'placeholder.png', ['unique'] = true, ['useable'] = false, ['description'] = 'Fisticuffs'}, + ['weapon_knife'] = {['name'] = 'weapon_knife', ['label'] = 'Knife', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_knife.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An instrument composed of a blade fixed into a handle, used for cutting or as a weapon'}, + ['weapon_nightstick'] = {['name'] = 'weapon_nightstick', ['label'] = 'Nightstick', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_nightstick.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A police officer\'s club or billy'}, + ['weapon_hammer'] = {['name'] = 'weapon_hammer', ['label'] = 'Hammer', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_hammer.png', ['unique'] = true, ['useable'] = false, ['description'] = 'Used for jobs such as breaking things (legs) and driving in nails'}, + ['weapon_bat'] = {['name'] = 'weapon_bat', ['label'] = 'Bat', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_bat.png', ['unique'] = true, ['useable'] = false, ['description'] = 'Used for hitting a ball in sports (or other things)'}, + ['weapon_golfclub'] = {['name'] = 'weapon_golfclub', ['label'] = 'Golfclub', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_golfclub.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A club used to hit the ball in golf'}, + ['weapon_crowbar'] = {['name'] = 'weapon_crowbar', ['label'] = 'Crowbar', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_crowbar.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An iron bar with a flattened end, used as a lever'}, + ['weapon_pistol'] = {['name'] = 'weapon_pistol', ['label'] = 'Walther P99', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_pistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A small firearm designed to be held in one hand'}, + ['weapon_pistol_mk2'] = {['name'] = 'weapon_pistol_mk2', ['label'] = 'Pistol Mk II', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_pistol_mk2.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An upgraded small firearm designed to be held in one hand'}, + ['weapon_combatpistol'] = {['name'] = 'weapon_combatpistol', ['label'] = 'Combat Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_combatpistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A combat version small firearm designed to be held in one hand'}, + ['weapon_appistol'] = {['name'] = 'weapon_appistol', ['label'] = 'AP Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_appistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A small firearm designed to be held in one hand that is automatic'}, + ['weapon_pistol50'] = {['name'] = 'weapon_pistol50', ['label'] = 'Pistol .50 Cal', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_pistol50.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A .50 caliber firearm designed to be held with both hands'}, + ['weapon_microsmg'] = {['name'] = 'weapon_microsmg', ['label'] = 'Micro SMG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SMG', ['image'] = 'weapon_microsmg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A handheld lightweight machine gun'}, + ['weapon_smg'] = {['name'] = 'weapon_smg', ['label'] = 'SMG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SMG', ['image'] = 'weapon_smg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A handheld lightweight machine gun'}, + ['weapon_assaultsmg'] = {['name'] = 'weapon_assaultsmg', ['label'] = 'Assault SMG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SMG', ['image'] = 'weapon_assaultsmg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An assault version of a handheld lightweight machine gun'}, + ['weapon_assaultrifle'] = {['name'] = 'weapon_assaultrifle', ['label'] = 'Assault Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_assaultrifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A rapid-fire, magazine-fed automatic rifle designed for infantry use'}, + ['weapon_carbinerifle'] = {['name'] = 'weapon_carbinerifle', ['label'] = 'Carbine Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_carbinerifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A lightweight automatic rifle'}, + ['weapon_advancedrifle'] = {['name'] = 'weapon_advancedrifle', ['label'] = 'Advanced Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_advancedrifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An assault version of a rapid-fire, magazine-fed automatic rifle designed for infantry use'}, + ['weapon_mg'] = {['name'] = 'weapon_mg', ['label'] = 'Machinegun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_MG', ['image'] = 'weapon_mg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An automatic gun that fires bullets in rapid succession for as long as the trigger is pressed'}, + ['weapon_combatmg'] = {['name'] = 'weapon_combatmg', ['label'] = 'Combat MG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_MG', ['image'] = 'weapon_combatmg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A combat version of an automatic gun that fires bullets in rapid succession for as long as the trigger is pressed'}, + ['weapon_pumpshotgun'] = {['name'] = 'weapon_pumpshotgun', ['label'] = 'Pump Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_pumpshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A pump-action smoothbore gun for firing small shot at short range'}, + ['weapon_sawnoffshotgun'] = {['name'] = 'weapon_sawnoffshotgun', ['label'] = 'Sawn-off Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_sawnoffshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A sawn-off smoothbore gun for firing small shot at short range'}, + ['weapon_assaultshotgun'] = {['name'] = 'weapon_assaultshotgun', ['label'] = 'Assault Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_assaultshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An assault version of asmoothbore gun for firing small shot at short range'}, + ['weapon_bullpupshotgun'] = {['name'] = 'weapon_bullpupshotgun', ['label'] = 'Bullpup Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_bullpupshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A compact smoothbore gun for firing small shot at short range'}, + ['weapon_stungun'] = {['name'] = 'weapon_stungun', ['label'] = 'Taser', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_stungun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A weapon firing barbs attached by wires to batteries, causing temporary paralysis'}, + ['weapon_sniperrifle'] = {['name'] = 'weapon_sniperrifle', ['label'] = 'Sniper Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SNIPER', ['image'] = 'weapon_sniperrifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A high-precision, long-range rifle'}, + ['weapon_heavysniper'] = {['name'] = 'weapon_heavysniper', ['label'] = 'Heavy Sniper', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SNIPER', ['image'] = 'weapon_heavysniper.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An upgraded high-precision, long-range rifle'}, + ['weapon_remotesniper'] = {['name'] = 'weapon_remotesniper', ['label'] = 'Remote Sniper', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SNIPER_REMOTE', ['image'] = 'weapon_remotesniper.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A portable high-precision, long-range rifle'}, + ['weapon_grenadelauncher'] = {['name'] = 'weapon_grenadelauncher', ['label'] = 'Grenade Launcher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_GRENADELAUNCHER', ['image'] = 'weapon_grenadelauncher.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A weapon that fires a specially-designed large-caliber projectile, often with an explosive, smoke or gas warhead'}, + ['weapon_grenadelauncher_smoke'] = {['name'] = 'weapon_grenadelauncher_smoke', ['label'] = 'Smoke Grenade Launcher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_GRENADELAUNCHER', ['image'] = 'weapon_smokegrenade.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A bomb that produces a lot of smoke when it explodes'}, + ['weapon_rpg'] = {['name'] = 'weapon_rpg', ['label'] = 'RPG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RPG', ['image'] = 'weapon_rpg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A rocket-propelled grenade launcher'}, + ['weapon_minigun'] = {['name'] = 'weapon_minigun', ['label'] = 'Minigun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_MINIGUN', ['image'] = 'weapon_minigun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A portable machine gun consisting of a rotating cluster of six barrels and capable of variable rates of fire of up to 6,000 rounds per minute'}, + ['weapon_grenade'] = {['name'] = 'weapon_grenade', ['label'] = 'Grenade', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_grenade.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A handheld throwable bomb'}, + ['weapon_stickybomb'] = {['name'] = 'weapon_stickybomb', ['label'] = 'C4', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_stickybomb.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An explosive charge covered with an adhesive that when thrown against an object sticks until it explodes'}, + ['weapon_smokegrenade'] = {['name'] = 'weapon_smokegrenade', ['label'] = 'Smoke Grenade', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_c4.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An explosive charge that can be remotely detonated'}, + ['weapon_bzgas'] = {['name'] = 'weapon_bzgas', ['label'] = 'BZ Gas', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_bzgas.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A cannister of gas that causes extreme pain'}, + ['weapon_molotov'] = {['name'] = 'weapon_molotov', ['label'] = 'Molotov', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_molotov.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A crude bomb made of a bottle filled with a flammable liquid and fitted with a wick for lighting'}, + ['weapon_fireextinguisher'] = {['name'] = 'weapon_fireextinguisher', ['label'] = 'Fire Extinguisher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_fireextinguisher.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A portable device that discharges a jet of water, foam, gas, or other material to extinguish a fire'}, + ['weapon_petrolcan'] = {['name'] = 'weapon_petrolcan', ['label'] = 'Petrol Can', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PETROLCAN', ['image'] = 'weapon_petrolcan.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A robust liquid container made from pressed steel'}, + ['weapon_briefcase'] = {['name'] = 'weapon_briefcase', ['label'] = 'Briefcase', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_briefcase.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A briefcase for storing important documents'}, + ['weapon_briefcase_02'] = {['name'] = 'weapon_briefcase_02', ['label'] = 'Suitcase', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_briefcase2.png', ['unique'] = true, ['useable'] = false, ['description'] = 'Wonderfull for nice vacation to Liberty City'}, + ['weapon_ball'] = {['name'] = 'weapon_ball', ['label'] = 'Ball', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_BALL', ['image'] = 'weapon_ball.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A solid or hollow spherical or egg-shaped object that is kicked, thrown, or hit in a game'}, + ['weapon_flare'] = {['name'] = 'weapon_flare', ['label'] = 'Flare pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_FLARE', ['image'] = 'weapon_flare.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A small pyrotechnic devices used for illumination and signalling'}, + ['weapon_snspistol'] = {['name'] = 'weapon_snspistol', ['label'] = 'SNS Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_snspistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A very small firearm designed to be easily concealed'}, + ['weapon_bottle'] = {['name'] = 'weapon_bottle', ['label'] = 'Broken Bottle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_bottle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A broken bottle'}, + ['weapon_gusenberg'] = {['name'] = 'weapon_gusenberg', ['label'] = 'Thompson SMG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_MG', ['image'] = 'weapon_gusenberg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An automatic rifle commonly referred to as a tommy gun'}, + ['weapon_specialcarbine'] = {['name'] = 'weapon_specialcarbine', ['label'] = 'Special Carbine', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_specialcarbine.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An extremely versatile assault rifle for any combat situation'}, + ['weapon_heavypistol'] = {['name'] = 'weapon_heavypistol', ['label'] = 'Heavy Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_heavypistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A hefty firearm designed to be held in one hand (or attempted)'}, + ['weapon_bullpuprifle'] = {['name'] = 'weapon_bullpuprifle', ['label'] = 'Bullpup Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_bullpuprifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A compact automatic assault rifle'}, + ['weapon_dagger'] = {['name'] = 'weapon_dagger', ['label'] = 'Dagger', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_dagger.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A short knife with a pointed and edged blade, used as a weapon'}, + ['weapon_vintagepistol'] = {['name'] = 'weapon_vintagepistol', ['label'] = 'Vintage Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_vintagepistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An antique firearm designed to be held in one hand'}, + ['weapon_firework'] = {['name'] = 'weapon_firework', ['label'] = 'Firework Launcher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_firework.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A device containing gunpowder and other combustible chemicals that causes a spectacular explosion when ignited'}, + ['weapon_musket'] = {['name'] = 'weapon_musket', ['label'] = 'Musket', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_musket.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An infantryman\'s light gun with a long barrel, typically smooth-bored, muzzleloading, and fired from the shoulder'}, + ['weapon_heavyshotgun'] = {['name'] = 'weapon_heavyshotgun', ['label'] = 'Heavy Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_heavyshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A large smoothbore gun for firing small shot at short range'}, + ['weapon_marksmanrifle'] = {['name'] = 'weapon_marksmanrifle', ['label'] = 'Marksman Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SNIPER', ['image'] = 'weapon_marksmanrifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A very accurate single-fire rifle'}, + ['weapon_hominglauncher'] = {['name'] = 'weapon_hominglauncher', ['label'] = 'Homing Launcher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_STINGER', ['image'] = 'weapon_hominglauncher.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A weapon fitted with an electronic device that enables it to find and hit a target'}, + ['weapon_proxmine'] = {['name'] = 'weapon_proxmine', ['label'] = 'Proxmine Grenade', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_proximitymine.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A bomb placed on the ground that detonates when going within its proximity'}, + ['weapon_snowball'] = {['name'] = 'weapon_snowball', ['label'] = 'Snowball', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_snowball.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A ball of packed snow, especially one made for throwing at other people for fun'}, + ['weapon_flaregun'] = {['name'] = 'weapon_flaregun', ['label'] = 'Flare Gun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_FLARE', ['image'] = 'weapon_flaregun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A handgun for firing signal rockets'}, + ['weapon_garbagebag'] = {['name'] = 'weapon_garbagebag', ['label'] = 'Garbage Bag', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_garbagebag.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A garbage bag'}, + ['weapon_handcuffs'] = {['name'] = 'weapon_handcuffs', ['label'] = 'Handcuffs', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_handcuffs.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A pair of lockable linked metal rings for securing a prisoner\'s wrists'}, + ['weapon_combatpdw'] = {['name'] = 'weapon_combatpdw', ['label'] = 'Combat PDW', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SMG', ['image'] = 'weapon_combatpdw.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A combat version of a handheld lightweight machine gun'}, + ['weapon_marksmanpistol'] = {['name'] = 'weapon_marksmanpistol', ['label'] = 'Marksman Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_marksmanpistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A very accurate small firearm designed to be held in one hand'}, + ['weapon_knuckle'] = {['name'] = 'weapon_knuckle', ['label'] = 'Knuckle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_knuckle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A metal guard worn over the knuckles in fighting, especially to increase the effect of the blows'}, + ['weapon_hatchet'] = {['name'] = 'weapon_hatchet', ['label'] = 'Hatchet', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_hatchet.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A small axe with a short handle for use in one hand'}, + ['weapon_railgun'] = {['name'] = 'weapon_railgun', ['label'] = 'Railgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_railgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A weapon that uses electromagnetic force to launch high velocity projectiles'}, + ['weapon_machete'] = {['name'] = 'weapon_machete', ['label'] = 'Machete', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_machete.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A broad, heavy knife used as a weapon'}, + ['weapon_machinepistol'] = {['name'] = 'weapon_machinepistol', ['label'] = 'Tec-9', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_machinepistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A self-loading pistol capable of burst or fully automatic fire'}, + ['weapon_switchblade'] = {['name'] = 'weapon_switchblade', ['label'] = 'Switchblade', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_switchblade.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A knife with a blade that springs out from the handle when a button is pressed'}, + ['weapon_revolver'] = {['name'] = 'weapon_revolver', ['label'] = 'Revolver', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_revolver.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A pistol with revolving chambers enabling several shots to be fired without reloading'}, + ['weapon_dbshotgun'] = {['name'] = 'weapon_dbshotgun', ['label'] = 'Double-barrel Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_dbshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A shotgun with two parallel barrels, allowing two single shots to be fired in quick succession'}, + ['weapon_compactrifle'] = {['name'] = 'weapon_compactrifle', ['label'] = 'Compact Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_compactrifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A compact version of an assault rifle'}, + ['weapon_autoshotgun'] = {['name'] = 'weapon_autoshotgun', ['label'] = 'Auto Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_autoshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A shotgun capable of rapid continous fire'}, + ['weapon_battleaxe'] = {['name'] = 'weapon_battleaxe', ['label'] = 'Battle Axe', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_battleaxe.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A large broad-bladed axe used in ancient warfare'}, + ['weapon_compactlauncher'] = {['name'] = 'weapon_compactlauncher', ['label'] = 'Compact Launcher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_compactlauncher.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A compact grenade launcher'}, + ['weapon_minismg'] = {['name'] = 'weapon_minismg', ['label'] = 'Mini SMG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SMG', ['image'] = 'weapon_minismg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A mini handheld lightweight machine gun'}, + ['weapon_pipebomb'] = {['name'] = 'weapon_pipebomb', ['label'] = 'Pipe Bomb', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_pipebomb.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A homemade bomb, the components of which are contained in a pipe'}, + ['weapon_poolcue'] = {['name'] = 'weapon_poolcue', ['label'] = 'Poolcue', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_poolcue.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A stick used to strike a ball, usually the cue ball (or other things)'}, + ['weapon_wrench'] = {['name'] = 'weapon_wrench', ['label'] = 'Wrench', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_wrench.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A tool used for gripping and turning nuts, bolts, pipes, etc'}, + ['weapon_bread'] = {['name'] = 'weapon_bread', ['label'] = 'Baquette', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'baquette.png', ['unique'] = true, ['useable'] = false, ['description'] = 'Bread...?'}, + ['weapon_flashlight'] = {['name'] = 'weapon_flashlight', ['label'] = 'Flashlight', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_flashlight.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A battery-operated portable light'}, -- PISTOL ATTACHMENTS - ["pistol_defaultclip"] = {["name"] = "pistol_defaultclip", ["label"] = "Pistol Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Pistol Default Clip"}, - ["pistol_extendedclip"] = {["name"] = "pistol_extendedclip", ["label"] = "Pistol EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Pistol Extended Clip"}, - ["pistol_flashlight"] = {["name"] = "pistol_flashlight", ["label"] = "Pistol Flashlight", ["weight"] = 1000, ["type"] = "item", ["image"] = "smg_flashlight.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Pistol Flashlight Attachment"}, - ["pistol_suppressor"] = {["name"] = "pistol_suppressor", ["label"] = "Pistol Suppressor", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Pistol Suppressor Attachment"}, - ["pistol_luxuryfinish"] = {["name"] = "pistol_luxuryfinish", ["label"] = "Pistol Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Pistol Luxury Finish"}, - ["combatpistol_defaultclip"] = {["name"] = "combatpistol_defaultclip", ["label"] = "Pistol Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Combat Pistol Default Clip"}, - ["combatpistol_extendedclip"] = {["name"] = "combatpistol_extendedclip", ["label"] = "Pistol EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Combat Pistol Extended Clip"}, - ["combatpistol_luxuryfinish"] = {["name"] = "combatpistol_luxuryfinish", ["label"] = "Pistol Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Combat Pistol Luxury Finish"}, - ["appistol_defaultclip"] = {["name"] = "appistol_defaultclip", ["label"] = "Pistol Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "APPistol Default Clip"}, - ["appistol_extendedclip"] = {["name"] = "appistol_extendedclip", ["label"] = "Pistol EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "APPistol Extended Clip"}, - ["appistol_luxuryfinish"] = {["name"] = "appistol_luxuryfinish", ["label"] = "Pistol Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "APPistol Luxury Finish"}, - ["pistol50_defaultclip"] = {["name"] = "pistol50_defaultclip", ["label"] = "Pistol Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = ".50 Pistol Default Clip"}, - ["pistol50_extendedclip"] = {["name"] = "pistol50_extendedclip", ["label"] = "Pistol EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = ".50 Pistol Extended Clip"}, - ["pistol50_luxuryfinish"] = {["name"] = "pistol50_luxuryfinish", ["label"] = "Pistol Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = ".50 Pistol Luxury Finish"}, - ["revolver_defaultclip"] = {["name"] = "revolver_defaultclip", ["label"] = "Pistol Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Revovler Default Clip"}, - ["revolver_vipvariant"] = {["name"] = "revolver_vipvariant", ["label"] = "Pistol Variant", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Revovler Variant"}, - ["revolver_bodyguardvariant"] = {["name"] = "revolver_bodyguardvariant", ["label"] = "Pistol Variant", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Revovler Variant"}, - ["snspistol_defaultclip"] = {["name"] = "snspistol_defaultclip", ["label"] = "Pistol Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "SNS Pistol Default Clip"}, - ["snspistol_extendedclip"] = {["name"] = "snspistol_extendedclip", ["label"] = "Pistol EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "SNS Pistol Extended Clip"}, - ["snspistol_grip"] = {["name"] = "snspistol_grip", ["label"] = "Pistol Grip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "SNS Pistol Grip Attachment"}, - ["heavypistol_defaultclip"] = {["name"] = "heavypistol_defaultclip", ["label"] = "Pistol Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Heavy Pistol Default Clip"}, - ["heavypistol_extendedclip"] = {["name"] = "heavypistol_extendedclip", ["label"] = "Pistol EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Heavy Pistol Extended Clip"}, - ["heavypistol_grip"] = {["name"] = "heavypistol_grip", ["label"] = "Pistol Grip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Heavy Pistol Grip Attachment"}, - ["vintagepistol_defaultclip"] = {["name"] = "vintagepistol_defaultclip", ["label"] = "Pistol Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Vintage Pistol Default Clip"}, - ["vintagepistol_extendedclip"] = {["name"] = "vintagepistol_extendedclip", ["label"] = "Pistol EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Vintage Pistol Default Clip"}, + ['pistol_defaultclip'] = {['name'] = 'pistol_defaultclip', ['label'] = 'Pistol Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Pistol Default Clip'}, + ['pistol_extendedclip'] = {['name'] = 'pistol_extendedclip', ['label'] = 'Pistol EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Pistol Extended Clip'}, + ['pistol_flashlight'] = {['name'] = 'pistol_flashlight', ['label'] = 'Pistol Flashlight', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'smg_flashlight.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Pistol Flashlight Attachment'}, + ['pistol_suppressor'] = {['name'] = 'pistol_suppressor', ['label'] = 'Pistol Suppressor', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Pistol Suppressor Attachment'}, + ['pistol_luxuryfinish'] = {['name'] = 'pistol_luxuryfinish', ['label'] = 'Pistol Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Pistol Luxury Finish'}, + ['combatpistol_defaultclip'] = {['name'] = 'combatpistol_defaultclip', ['label'] = 'Pistol Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Combat Pistol Default Clip'}, + ['combatpistol_extendedclip'] = {['name'] = 'combatpistol_extendedclip', ['label'] = 'Pistol EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Combat Pistol Extended Clip'}, + ['combatpistol_luxuryfinish'] = {['name'] = 'combatpistol_luxuryfinish', ['label'] = 'Pistol Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Combat Pistol Luxury Finish'}, + ['appistol_defaultclip'] = {['name'] = 'appistol_defaultclip', ['label'] = 'Pistol Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'APPistol Default Clip'}, + ['appistol_extendedclip'] = {['name'] = 'appistol_extendedclip', ['label'] = 'Pistol EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'APPistol Extended Clip'}, + ['appistol_luxuryfinish'] = {['name'] = 'appistol_luxuryfinish', ['label'] = 'Pistol Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'APPistol Luxury Finish'}, + ['pistol50_defaultclip'] = {['name'] = 'pistol50_defaultclip', ['label'] = 'Pistol Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = '.50 Pistol Default Clip'}, + ['pistol50_extendedclip'] = {['name'] = 'pistol50_extendedclip', ['label'] = 'Pistol EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = '.50 Pistol Extended Clip'}, + ['pistol50_luxuryfinish'] = {['name'] = 'pistol50_luxuryfinish', ['label'] = 'Pistol Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = '.50 Pistol Luxury Finish'}, + ['revolver_defaultclip'] = {['name'] = 'revolver_defaultclip', ['label'] = 'Pistol Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Revovler Default Clip'}, + ['revolver_vipvariant'] = {['name'] = 'revolver_vipvariant', ['label'] = 'Pistol Variant', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Revovler Variant'}, + ['revolver_bodyguardvariant'] = {['name'] = 'revolver_bodyguardvariant', ['label'] = 'Pistol Variant', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Revovler Variant'}, + ['snspistol_defaultclip'] = {['name'] = 'snspistol_defaultclip', ['label'] = 'Pistol Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'SNS Pistol Default Clip'}, + ['snspistol_extendedclip'] = {['name'] = 'snspistol_extendedclip', ['label'] = 'Pistol EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'SNS Pistol Extended Clip'}, + ['snspistol_grip'] = {['name'] = 'snspistol_grip', ['label'] = 'Pistol Grip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'SNS Pistol Grip Attachment'}, + ['heavypistol_defaultclip'] = {['name'] = 'heavypistol_defaultclip', ['label'] = 'Pistol Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Heavy Pistol Default Clip'}, + ['heavypistol_extendedclip'] = {['name'] = 'heavypistol_extendedclip', ['label'] = 'Pistol EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Heavy Pistol Extended Clip'}, + ['heavypistol_grip'] = {['name'] = 'heavypistol_grip', ['label'] = 'Pistol Grip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Heavy Pistol Grip Attachment'}, + ['vintagepistol_defaultclip'] = {['name'] = 'vintagepistol_defaultclip', ['label'] = 'Pistol Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Vintage Pistol Default Clip'}, + ['vintagepistol_extendedclip'] = {['name'] = 'vintagepistol_extendedclip', ['label'] = 'Pistol EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Vintage Pistol Default Clip'}, -- SMG ATTACHMENTS - ["microsmg_defaultclip"] = {["name"] = "microsmg_defaultclip", ["label"] = "SMG Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Micro SMG Default Clip"}, - ["microsmg_extendedclip"] = {["name"] = "microsmg_extendedclip", ["label"] = "SMG EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Micro SMG Extended Clip"}, - ["microsmg_scope"] = {["name"] = "microsmg_scope", ["label"] = "SMG Scope", ["weight"] = 1000, ["type"] = "item", ["image"] = "smg_scope.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Micro SMG Scope Attachment"}, - ["microsmg_luxuryfinish"] = {["name"] = "microsmg_luxuryfinish", ["label"] = "SMG Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Micro SMG Luxury Finish"}, - ["smg_defaultclip"] = {["name"] = "smg_defaultclip", ["label"] = "SMG Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "SMG Default Clip"}, - ["smg_extendedclip"] = {["name"] = "smg_extendedclip", ["label"] = "SMG EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "SMG Extended Clip"}, - ["smg_drum"] = {["name"] = "smg_drum", ["label"] = "SMG Drum", ["weight"] = 1000, ["type"] = "item", ["image"] = "rifle_drummag.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "SMG Drum"}, - ["smg_scope"] = {["name"] = "smg_scope", ["label"] = "SMG Scope", ["weight"] = 1000, ["type"] = "item", ["image"] = "smg_scope.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "SMG Scope Attachment"}, - ["smg_luxuryfinish"] = {["name"] = "smg_luxuryfinish", ["label"] = "SMG Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "SMG Luxury Finish"}, - ["assaultsmg_defaultclip"] = {["name"] = "assaultsmg_defaultclip", ["label"] = "SMG Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Assault SMG Default Clip"}, - ["assaultsmg_extendedclip"] = {["name"] = "assaultsmg_extendedclip", ["label"] = "SMG EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Assault SMG Extended Clip"}, - ["assaultsmg_luxuryfinish"] = {["name"] = "assaultsmg_luxuryfinish", ["label"] = "SMG Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Assault SMG Luxury Finish"}, - ["minismg_defaultclip"] = {["name"] = "minismg_defaultclip", ["label"] = "SMG Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Mini SMG Default Clip"}, - ["minismg_extendedclip"] = {["name"] = "minismg_extendedclip", ["label"] = "SMG EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Mini SMG Extended Clip"}, - ["machinepistol_defaultclip"] = {["name"] = "machinepistol_defaultclip", ["label"] = "SMG Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Machine Pistol Default Clip"}, - ["machinepistol_extendedclip"] = {["name"] = "machinepistol_extendedclip", ["label"] = "SMG EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Machine Pistol Extended Clip"}, - ["machinepistol_drum"] = {["name"] = "machinepistol_drum", ["label"] = "SMG Drum", ["weight"] = 1000, ["type"] = "item", ["image"] = "rifle_drummag.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Machine Pistol Drum"}, - ["combatpdw_defaultclip"] = {["name"] = "combatpdw_defaultclip", ["label"] = "SMG Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Combat PDW Default Clip"}, - ["combatpdw_extendedclip"] = {["name"] = "combatpdw_extendedclip", ["label"] = "SMG EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Combat PDW Extended Clip"}, - ["combatpdw_drum"] = {["name"] = "combatpdw_drum", ["label"] = "SMG Drum", ["weight"] = 1000, ["type"] = "item", ["image"] = "rifle_drummag.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Combat PDW Drum"}, - ["combatpdw_grip"] = {["name"] = "combatpdw_grip", ["label"] = "SMG Grip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Combat PDW Grip Attachment"}, - ["combatpdw_scope"] = {["name"] = "combatpdw_scope", ["label"] = "SMG Scope", ["weight"] = 1000, ["type"] = "item", ["image"] = "smg_scope.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Combat PDW Scope Attachment"}, + ['microsmg_defaultclip'] = {['name'] = 'microsmg_defaultclip', ['label'] = 'SMG Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Micro SMG Default Clip'}, + ['microsmg_extendedclip'] = {['name'] = 'microsmg_extendedclip', ['label'] = 'SMG EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Micro SMG Extended Clip'}, + ['microsmg_scope'] = {['name'] = 'microsmg_scope', ['label'] = 'SMG Scope', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'smg_scope.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Micro SMG Scope Attachment'}, + ['microsmg_luxuryfinish'] = {['name'] = 'microsmg_luxuryfinish', ['label'] = 'SMG Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Micro SMG Luxury Finish'}, + ['smg_defaultclip'] = {['name'] = 'smg_defaultclip', ['label'] = 'SMG Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'SMG Default Clip'}, + ['smg_extendedclip'] = {['name'] = 'smg_extendedclip', ['label'] = 'SMG EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'SMG Extended Clip'}, + ['smg_drum'] = {['name'] = 'smg_drum', ['label'] = 'SMG Drum', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'rifle_drummag.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'SMG Drum'}, + ['smg_scope'] = {['name'] = 'smg_scope', ['label'] = 'SMG Scope', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'smg_scope.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'SMG Scope Attachment'}, + ['smg_luxuryfinish'] = {['name'] = 'smg_luxuryfinish', ['label'] = 'SMG Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'SMG Luxury Finish'}, + ['assaultsmg_defaultclip'] = {['name'] = 'assaultsmg_defaultclip', ['label'] = 'SMG Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Assault SMG Default Clip'}, + ['assaultsmg_extendedclip'] = {['name'] = 'assaultsmg_extendedclip', ['label'] = 'SMG EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Assault SMG Extended Clip'}, + ['assaultsmg_luxuryfinish'] = {['name'] = 'assaultsmg_luxuryfinish', ['label'] = 'SMG Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Assault SMG Luxury Finish'}, + ['minismg_defaultclip'] = {['name'] = 'minismg_defaultclip', ['label'] = 'SMG Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Mini SMG Default Clip'}, + ['minismg_extendedclip'] = {['name'] = 'minismg_extendedclip', ['label'] = 'SMG EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Mini SMG Extended Clip'}, + ['machinepistol_defaultclip'] = {['name'] = 'machinepistol_defaultclip', ['label'] = 'SMG Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Machine Pistol Default Clip'}, + ['machinepistol_extendedclip'] = {['name'] = 'machinepistol_extendedclip', ['label'] = 'SMG EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Machine Pistol Extended Clip'}, + ['machinepistol_drum'] = {['name'] = 'machinepistol_drum', ['label'] = 'SMG Drum', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'rifle_drummag.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Machine Pistol Drum'}, + ['combatpdw_defaultclip'] = {['name'] = 'combatpdw_defaultclip', ['label'] = 'SMG Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Combat PDW Default Clip'}, + ['combatpdw_extendedclip'] = {['name'] = 'combatpdw_extendedclip', ['label'] = 'SMG EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Combat PDW Extended Clip'}, + ['combatpdw_drum'] = {['name'] = 'combatpdw_drum', ['label'] = 'SMG Drum', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'rifle_drummag.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Combat PDW Drum'}, + ['combatpdw_grip'] = {['name'] = 'combatpdw_grip', ['label'] = 'SMG Grip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Combat PDW Grip Attachment'}, + ['combatpdw_scope'] = {['name'] = 'combatpdw_scope', ['label'] = 'SMG Scope', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'smg_scope.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Combat PDW Scope Attachment'}, -- SHOTGUN ATTACHMENTS - ["shotgun_suppressor"] = {["name"] = "shotgun_suppressor", ["label"] = "Shotgun Suppressor", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Shotgun Suppressor Attachment"}, - ["pumpshotgun_luxuryfinish"] = {["name"] = "pumpshotgun_luxuryfinish", ["label"] = "Shotgun Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Pump Shotgun Luxury Finish"}, - ["sawnoffshotgun_luxuryfinish"] = {["name"] = "sawnoffshotgun_luxuryfinish", ["label"] = "Shotgun Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Sawn Off Shotgun Luxury Finish"}, - ["assaultshotgun_defaultclip"] = {["name"] = "assaultshotgun_defaultclip", ["label"] = "Shotgun Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Assault Shotgun Default Clip"}, - ["assaultshotgun_extendedclip"] = {["name"] = "assaultshotgun_extendedclip", ["label"] = "Shotgun EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Assault Shotgun Extended Clip"}, - ["heavyshotgun_defaultclip"] = {["name"] = "heavyshotgun_defaultclip", ["label"] = "Shotgun Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Heavy Shotgun Default Clip"}, - ["heavyshotgun_extendedclip"] = {["name"] = "heavyshotgun_extendedclip", ["label"] = "Shotgun EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Heavy Shotgun Extended Clip"}, - ["heavyshotgun_drum"] = {["name"] = "heavyshotgun_drum", ["label"] = "Shotgun Drum", ["weight"] = 1000, ["type"] = "item", ["image"] = "rifle_drummag.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Heavy Shotgun Drum"}, + ['shotgun_suppressor'] = {['name'] = 'shotgun_suppressor', ['label'] = 'Shotgun Suppressor', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Shotgun Suppressor Attachment'}, + ['pumpshotgun_luxuryfinish'] = {['name'] = 'pumpshotgun_luxuryfinish', ['label'] = 'Shotgun Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Pump Shotgun Luxury Finish'}, + ['sawnoffshotgun_luxuryfinish'] = {['name'] = 'sawnoffshotgun_luxuryfinish', ['label'] = 'Shotgun Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Sawn Off Shotgun Luxury Finish'}, + ['assaultshotgun_defaultclip'] = {['name'] = 'assaultshotgun_defaultclip', ['label'] = 'Shotgun Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Assault Shotgun Default Clip'}, + ['assaultshotgun_extendedclip'] = {['name'] = 'assaultshotgun_extendedclip', ['label'] = 'Shotgun EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Assault Shotgun Extended Clip'}, + ['heavyshotgun_defaultclip'] = {['name'] = 'heavyshotgun_defaultclip', ['label'] = 'Shotgun Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Heavy Shotgun Default Clip'}, + ['heavyshotgun_extendedclip'] = {['name'] = 'heavyshotgun_extendedclip', ['label'] = 'Shotgun EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Heavy Shotgun Extended Clip'}, + ['heavyshotgun_drum'] = {['name'] = 'heavyshotgun_drum', ['label'] = 'Shotgun Drum', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'rifle_drummag.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Heavy Shotgun Drum'}, -- RIFLE ATTACHMENTS - ["assaultrifle_defaultclip"] = {["name"] = "assaultrifle_defaultclip", ["label"] = "Rifle Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Assault Rifle Default Clip"}, - ["assaultrifle_extendedclip"] = {["name"] = "assaultrifle_extendedclip", ["label"] = "Rifle EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Assault Rifle Extended Clip"}, - ["assaultrifle_drum"] = {["name"] = "assaultrifle_drum", ["label"] = "Rifle Drum", ["weight"] = 1000, ["type"] = "item", ["image"] = "rifle_drummag.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Assault Rifle Drum"}, - ["rifle_flashlight"] = {["name"] = "rifle_flashlight", ["label"] = "Rifle Flashlight", ["weight"] = 1000, ["type"] = "item", ["image"] = "smg_flashlight.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Rifle Flashlight Attachment"}, - ["rifle_grip"] = {["name"] = "rifle_grip", ["label"] = "Rifle Grip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Rifle Grip Attachment"}, - ["rifle_suppressor"] = {["name"] = "rifle_suppressor", ["label"] = "Rifle Suppressor", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Rifle Suppressor Attachment"}, - ["assaultrifle_luxuryfinish"] = {["name"] = "assaultrifle_luxuryfinish", ["label"] = "Rifle Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Assault Rifle Luxury Finish"}, - ["carbinerifle_defaultclip"] = {["name"] = "carbinerifle_defaultclip", ["label"] = "Rifle Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Carbine Rifle Default Clip"}, - ["carbinerifle_extendedclip"] = {["name"] = "carbinerifle_extendedclip", ["label"] = "Rifle EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Carbine Rifle Extended Clip"}, - ["carbinerifle_drum"] = {["name"] = "carbinerifle_drum", ["label"] = "Rifle Drum", ["weight"] = 1000, ["type"] = "item", ["image"] = "rifle_drummag.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Carbine Rifle Drum"}, - ["carbinerifle_scope"] = {["name"] = "carbinerifle_scope", ["label"] = "Rifle Scope", ["weight"] = 1000, ["type"] = "item", ["image"] = "smg_scope.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Carbine Rifle Scope"}, - ["carbinerifle_luxuryfinish"] = {["name"] = "carbinerifle_luxuryfinish", ["label"] = "Rifle Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Carbine Rifle Luxury Finish"}, - ["advancedrifle_defaultclip"] = {["name"] = "advancedrifle_defaultclip", ["label"] = "Rifle Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Advanced Rifle Default Clip"}, - ["advancedrifle_extendedclip"] = {["name"] = "advancedrifle_extendedclip", ["label"] = "Rifle EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Advanced Rifle Extended Clip"}, - ["advancedrifle_luxuryfinish"] = {["name"] = "advancedrifle_luxuryfinish", ["label"] = "Rifle Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Advanced Rifle Luxury Finish"}, - ["specialcarbine_defaultclip"] = {["name"] = "specialcarbine_defaultclip", ["label"] = "Rifle Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Special Carbine Default Clip"}, - ["specialcarbine_extendedclip"] = {["name"] = "specialcarbine_extendedclip", ["label"] = "Rifle EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Special Carbine Extended Clip"}, - ["specialcarbine_drum"] = {["name"] = "specialcarbine_drum", ["label"] = "Rifle Drum", ["weight"] = 1000, ["type"] = "item", ["image"] = "rifle_drummag.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Special Carbine Drum"}, - ["specialcarbine_luxuryfinish"] = {["name"] = "specialcarbine_luxuryfinish", ["label"] = "Rifle Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Special Carbine Luxury Finish"}, - ["bullpuprifle_defaultclip"] = {["name"] = "bullpuprifle_defaultclip", ["label"] = "Rifle Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Bullpup Rifle Default Clip"}, - ["bullpuprifle_extendedclip"] = {["name"] = "bullpuprifle_extendedclip", ["label"] = "Rifle EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Bullpup Rifle Extended Clip"}, - ["bullpuprifle_luxuryfinish"] = {["name"] = "bullpuprifle_luxuryfinish", ["label"] = "Rifle Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Bullpup Rifle Luxury Finish"}, - ["compactrifle_defaultclip"] = {["name"] = "compactrifle_defaultclip", ["label"] = "Rifle Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Compact Rifle Default Clip"}, - ["compactrifle_extendedclip"] = {["name"] = "compactrifle_extendedclip", ["label"] = "Rifle EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Compact Rifle Extended Clip"}, - ["compactrifle_drum"] = {["name"] = "compactrifle_drum", ["label"] = "Rifle Drum", ["weight"] = 1000, ["type"] = "item", ["image"] = "rifle_drummag.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Compact Rifle Drum"}, - ["gusenberg_defaultclip"] = {["name"] = "gusenberg_defaultclip", ["label"] = "Rifle Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Gusenberg Default Clip"}, - ["gusenberg_extendedclip"] = {["name"] = "gusenberg_extendedclip", ["label"] = "Rifle EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Gusenberg Extended Clip"}, + ['assaultrifle_defaultclip'] = {['name'] = 'assaultrifle_defaultclip', ['label'] = 'Rifle Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Assault Rifle Default Clip'}, + ['assaultrifle_extendedclip'] = {['name'] = 'assaultrifle_extendedclip', ['label'] = 'Rifle EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Assault Rifle Extended Clip'}, + ['assaultrifle_drum'] = {['name'] = 'assaultrifle_drum', ['label'] = 'Rifle Drum', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'rifle_drummag.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Assault Rifle Drum'}, + ['rifle_flashlight'] = {['name'] = 'rifle_flashlight', ['label'] = 'Rifle Flashlight', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'smg_flashlight.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Rifle Flashlight Attachment'}, + ['rifle_grip'] = {['name'] = 'rifle_grip', ['label'] = 'Rifle Grip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Rifle Grip Attachment'}, + ['rifle_suppressor'] = {['name'] = 'rifle_suppressor', ['label'] = 'Rifle Suppressor', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Rifle Suppressor Attachment'}, + ['assaultrifle_luxuryfinish'] = {['name'] = 'assaultrifle_luxuryfinish', ['label'] = 'Rifle Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Assault Rifle Luxury Finish'}, + ['carbinerifle_defaultclip'] = {['name'] = 'carbinerifle_defaultclip', ['label'] = 'Rifle Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Carbine Rifle Default Clip'}, + ['carbinerifle_extendedclip'] = {['name'] = 'carbinerifle_extendedclip', ['label'] = 'Rifle EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Carbine Rifle Extended Clip'}, + ['carbinerifle_drum'] = {['name'] = 'carbinerifle_drum', ['label'] = 'Rifle Drum', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'rifle_drummag.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Carbine Rifle Drum'}, + ['carbinerifle_scope'] = {['name'] = 'carbinerifle_scope', ['label'] = 'Rifle Scope', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'smg_scope.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Carbine Rifle Scope'}, + ['carbinerifle_luxuryfinish'] = {['name'] = 'carbinerifle_luxuryfinish', ['label'] = 'Rifle Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Carbine Rifle Luxury Finish'}, + ['advancedrifle_defaultclip'] = {['name'] = 'advancedrifle_defaultclip', ['label'] = 'Rifle Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Advanced Rifle Default Clip'}, + ['advancedrifle_extendedclip'] = {['name'] = 'advancedrifle_extendedclip', ['label'] = 'Rifle EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Advanced Rifle Extended Clip'}, + ['advancedrifle_luxuryfinish'] = {['name'] = 'advancedrifle_luxuryfinish', ['label'] = 'Rifle Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Advanced Rifle Luxury Finish'}, + ['specialcarbine_defaultclip'] = {['name'] = 'specialcarbine_defaultclip', ['label'] = 'Rifle Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Special Carbine Default Clip'}, + ['specialcarbine_extendedclip'] = {['name'] = 'specialcarbine_extendedclip', ['label'] = 'Rifle EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Special Carbine Extended Clip'}, + ['specialcarbine_drum'] = {['name'] = 'specialcarbine_drum', ['label'] = 'Rifle Drum', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'rifle_drummag.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Special Carbine Drum'}, + ['specialcarbine_luxuryfinish'] = {['name'] = 'specialcarbine_luxuryfinish', ['label'] = 'Rifle Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Special Carbine Luxury Finish'}, + ['bullpuprifle_defaultclip'] = {['name'] = 'bullpuprifle_defaultclip', ['label'] = 'Rifle Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Bullpup Rifle Default Clip'}, + ['bullpuprifle_extendedclip'] = {['name'] = 'bullpuprifle_extendedclip', ['label'] = 'Rifle EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Bullpup Rifle Extended Clip'}, + ['bullpuprifle_luxuryfinish'] = {['name'] = 'bullpuprifle_luxuryfinish', ['label'] = 'Rifle Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Bullpup Rifle Luxury Finish'}, + ['compactrifle_defaultclip'] = {['name'] = 'compactrifle_defaultclip', ['label'] = 'Rifle Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Compact Rifle Default Clip'}, + ['compactrifle_extendedclip'] = {['name'] = 'compactrifle_extendedclip', ['label'] = 'Rifle EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Compact Rifle Extended Clip'}, + ['compactrifle_drum'] = {['name'] = 'compactrifle_drum', ['label'] = 'Rifle Drum', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'rifle_drummag.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Compact Rifle Drum'}, + ['gusenberg_defaultclip'] = {['name'] = 'gusenberg_defaultclip', ['label'] = 'Rifle Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Gusenberg Default Clip'}, + ['gusenberg_extendedclip'] = {['name'] = 'gusenberg_extendedclip', ['label'] = 'Rifle EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Gusenberg Extended Clip'}, -- SNIPER ATTACHMENTS - ["sniperrifle_defaultclip"] = {["name"] = "sniperrifle_defaultclip", ["label"] = "Sniper Suppressor", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Sniper Rifle Default Clip"}, - ["sniper_scope"] = {["name"] = "sniper_scope", ["label"] = "Sniper Scope", ["weight"] = 1000, ["type"] = "item", ["image"] = "smg_scope.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Sniper Rifle Scope Attachment"}, - ["snipermax_scope"] = {["name"] = "snipermax_scope", ["label"] = "Sniper Max Scope", ["weight"] = 1000, ["type"] = "item", ["image"] = "smg_scope.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Sniper Rifle Max Scope Attachment"}, - ["sniper_grip"] = {["name"] = "sniper_grip", ["label"] = "Sniper Grip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Sniper Rifle Grip Attachment"}, - ["heavysniper_defaultclip"] = {["name"] = "heavysniper_defaultclip", ["label"] = "Sniper Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Heavy Sniper Default Clip"}, - ["marksmanrifle_defaultclip"] = {["name"] = "marksmanrifle_defaultclip", ["label"] = "Sniper Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Marksman Rifle Default Clip"}, - ["marksmanrifle_extendedclip"] = {["name"] = "marksmanrifle_extendedclip", ["label"] = "Sniper EXT Clip", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_extendedclip.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Marksman Rifle Extended Clip"}, - ["marksmanrifle_scope"] = {["name"] = "marksmanrifle_scope", ["label"] = "Sniper Scope", ["weight"] = 1000, ["type"] = "item", ["image"] = "smg_scope.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Marksman Rifle Scope Attachment"}, - ["marksmanrifle_luxuryfinish"] = {["name"] = "marksmanrifle_luxuryfinish", ["label"] = "Sniper Finish", ["weight"] = 1000, ["type"] = "item", ["image"] = "pistol_suppressor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Marksman Rifle Luxury Finish"}, + ['sniperrifle_defaultclip'] = {['name'] = 'sniperrifle_defaultclip', ['label'] = 'Sniper Suppressor', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Sniper Rifle Default Clip'}, + ['sniper_scope'] = {['name'] = 'sniper_scope', ['label'] = 'Sniper Scope', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'smg_scope.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Sniper Rifle Scope Attachment'}, + ['snipermax_scope'] = {['name'] = 'snipermax_scope', ['label'] = 'Sniper Max Scope', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'smg_scope.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Sniper Rifle Max Scope Attachment'}, + ['sniper_grip'] = {['name'] = 'sniper_grip', ['label'] = 'Sniper Grip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Sniper Rifle Grip Attachment'}, + ['heavysniper_defaultclip'] = {['name'] = 'heavysniper_defaultclip', ['label'] = 'Sniper Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Heavy Sniper Default Clip'}, + ['marksmanrifle_defaultclip'] = {['name'] = 'marksmanrifle_defaultclip', ['label'] = 'Sniper Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Marksman Rifle Default Clip'}, + ['marksmanrifle_extendedclip'] = {['name'] = 'marksmanrifle_extendedclip', ['label'] = 'Sniper EXT Clip', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_extendedclip.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Marksman Rifle Extended Clip'}, + ['marksmanrifle_scope'] = {['name'] = 'marksmanrifle_scope', ['label'] = 'Sniper Scope', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'smg_scope.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Marksman Rifle Scope Attachment'}, + ['marksmanrifle_luxuryfinish'] = {['name'] = 'marksmanrifle_luxuryfinish', ['label'] = 'Sniper Finish', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pistol_suppressor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Marksman Rifle Luxury Finish'}, -- Weapon Tints - ["weapontint_black"] = {["name"] = "weapontint_black", ["label"] = "Default Tint", ["weight"] = 1000, ["type"] = "item", ["image"] = "weapontint_black.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Default/Black Weapon Tint"}, - ["weapontint_green"] = {["name"] = "weapontint_green", ["label"] = "Green Tint", ["weight"] = 1000, ["type"] = "item", ["image"] = "weapontint_green.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Green Weapon Tint"}, - ["weapontint_gold"] = {["name"] = "weapontint_gold", ["label"] = "Gold Tint", ["weight"] = 1000, ["type"] = "item", ["image"] = "weapontint_gold.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Gold Weapon Tint"}, - ["weapontint_pink"] = {["name"] = "weapontint_pink", ["label"] = "Pink Tint", ["weight"] = 1000, ["type"] = "item", ["image"] = "weapontint_pink.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Pink Weapon Tint"}, - ["weapontint_army"] = {["name"] = "weapontint_army", ["label"] = "Army Tint", ["weight"] = 1000, ["type"] = "item", ["image"] = "weapontint_army.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Army Weapon Tint"}, - ["weapontint_lspd"] = {["name"] = "weapontint_lspd", ["label"] = "LSPD Tint", ["weight"] = 1000, ["type"] = "item", ["image"] = "weapontint_lspd.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "LSPD Weapon Tint"}, - ["weapontint_orange"] = {["name"] = "weapontint_orange", ["label"] = "Orange Tint", ["weight"] = 1000, ["type"] = "item", ["image"] = "weapontint_orange.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Orange Weapon Tint"}, - ["weapontint_plat"] = {["name"] = "weapontint_plat", ["label"] = "Platinum Tint", ["weight"] = 1000, ["type"] = "item", ["image"] = "weapontint_plat.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Platinum Weapon Tint"}, + ['weapontint_black'] = {['name'] = 'weapontint_black', ['label'] = 'Default Tint', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'weapontint_black.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Default/Black Weapon Tint'}, + ['weapontint_green'] = {['name'] = 'weapontint_green', ['label'] = 'Green Tint', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'weapontint_green.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Green Weapon Tint'}, + ['weapontint_gold'] = {['name'] = 'weapontint_gold', ['label'] = 'Gold Tint', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'weapontint_gold.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Gold Weapon Tint'}, + ['weapontint_pink'] = {['name'] = 'weapontint_pink', ['label'] = 'Pink Tint', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'weapontint_pink.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Pink Weapon Tint'}, + ['weapontint_army'] = {['name'] = 'weapontint_army', ['label'] = 'Army Tint', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'weapontint_army.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Army Weapon Tint'}, + ['weapontint_lspd'] = {['name'] = 'weapontint_lspd', ['label'] = 'LSPD Tint', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'weapontint_lspd.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'LSPD Weapon Tint'}, + ['weapontint_orange'] = {['name'] = 'weapontint_orange', ['label'] = 'Orange Tint', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'weapontint_orange.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Orange Weapon Tint'}, + ['weapontint_plat'] = {['name'] = 'weapontint_plat', ['label'] = 'Platinum Tint', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'weapontint_plat.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Platinum Weapon Tint'}, -- ITEMS - ["id_card"] = {["name"] = "id_card", ["label"] = "ID Card", ["weight"] = 0, ["type"] = "item", ["image"] = "id_card.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "A card containing all your information to identify yourself"}, - ["driver_license"] = {["name"] = "driver_license", ["label"] = "Drivers License", ["weight"] = 0, ["type"] = "item", ["image"] = "driver_license.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Permit to show you can drive a vehicle"}, - ["lawyerpass"] = {["name"] = "lawyerpass", ["label"] = "Lawyer Pass", ["weight"] = 0, ["type"] = "item", ["image"] = "lawyerpass.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Pass exclusive to lawyers to show they can represent a suspect"}, - ["tosti"] = {["name"] = "tosti", ["label"] = "Grilled Cheese Sandwich", ["weight"] = 200, ["type"] = "item", ["image"] = "tosti.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Nice to eat"}, - ["casinochips"] = {["name"] = "casinochips", ["label"] = "Casino Chips", ["weight"] = 0, ["type"] = "item", ["image"] = "casinochips.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Chips For Casino Gambling"}, - ["water_bottle"] = {["name"] = "water_bottle", ["label"] = "Bottle of Water", ["weight"] = 500, ["type"] = "item", ["image"] = "water_bottle.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "For all the thirsty out there"}, - ["beer"] = {["name"] = "beer", ["label"] = "Beer", ["weight"] = 500, ["type"] = "item", ["image"] = "beer.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Nothing like a good cold beer!"}, - ["whiskey"] = {["name"] = "whiskey", ["label"] = "Whiskey", ["weight"] = 500, ["type"] = "item", ["image"] = "whiskey.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "For all the thirsty out there"}, - ["vodka"] = {["name"] = "vodka", ["label"] = "Vodka", ["weight"] = 500, ["type"] = "item", ["image"] = "vodka.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "For all the thirsty out there"}, - ["coffee"] = {["name"] = "coffee", ["label"] = "Coffee", ["weight"] = 200, ["type"] = "item", ["image"] = "coffee.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Pump 4 Caffeine"}, - ["kurkakola"] = {["name"] = "kurkakola", ["label"] = "Cola", ["weight"] = 500, ["type"] = "item", ["image"] = "cola.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "For all the thirsty out there"}, - ["twerks_candy"] = {["name"] = "twerks_candy", ["label"] = "Twerks", ["weight"] = 100, ["type"] = "item", ["image"] = "twerks_candy.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Some delicious candy :O"}, - ["snikkel_candy"] = {["name"] = "snikkel_candy", ["label"] = "Snikkel", ["weight"] = 100, ["type"] = "item", ["image"] = "snikkel_candy.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Some delicious candy :O"}, - ["joint"] = {["name"] = "joint", ["label"] = "Joint", ["weight"] = 0, ["type"] = "item", ["image"] = "joint.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Sidney would be very proud at you"}, - ["cokebaggy"] = {["name"] = "cokebaggy", ["label"] = "Bag of Coke", ["weight"] = 0, ["type"] = "item", ["image"] = "cocaine_baggy.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "To get happy real quick"}, - ["crack_baggy"] = {["name"] = "crack_baggy", ["label"] = "Bag of Crack", ["weight"] = 0, ["type"] = "item", ["image"] = "crack_baggy.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "To get happy faster"}, - ["xtcbaggy"] = {["name"] = "xtcbaggy", ["label"] = "Bag of XTC", ["weight"] = 0, ["type"] = "item", ["image"] = "xtc_baggy.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Pop those pills baby"}, - ["plastic"] = {["name"] = "plastic", ["label"] = "Plastic", ["weight"] = 100, ["type"] = "item", ["image"] = "plastic.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "RECYCLE! - Greta Thunberg 2019"}, - ["metalscrap"] = {["name"] = "metalscrap", ["label"] = "Metal Scrap", ["weight"] = 100, ["type"] = "item", ["image"] = "metalscrap.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "You can probably make something nice out of this"}, - ["copper"] = {["name"] = "copper", ["label"] = "Copper", ["weight"] = 100, ["type"] = "item", ["image"] = "copper.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Nice piece of metal that you can probably use for something"}, - ["aluminum"] = {["name"] = "aluminum", ["label"] = "Aluminium", ["weight"] = 100, ["type"] = "item", ["image"] = "aluminum.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Nice piece of metal that you can probably use for something"}, - ["aluminumoxide"] = {["name"] = "aluminumoxide", ["label"] = "Aluminium Powder", ["weight"] = 100, ["type"] = "item", ["image"] = "aluminumoxide.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Some powder to mix with"}, - ["iron"] = {["name"] = "iron", ["label"] = "Iron", ["weight"] = 100, ["type"] = "item", ["image"] = "ironplate.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Handy piece of metal that you can probably use for something"}, - ["ironoxide"] = {["name"] = "ironoxide", ["label"] = "Iron Powder", ["weight"] = 100, ["type"] = "item", ["image"] = "ironoxide.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = {accept = {"aluminumoxide"}, reward = "thermite", anim = {["dict"] = "anim@amb@business@weed@weed_inspecting_high_dry@", ["lib"] = "weed_inspecting_high_base_inspector", ["text"] = "Mixing powder..", ["timeOut"] = 10000}}, ["description"] = "Some powder to mix with."}, - ["steel"] = {["name"] = "steel", ["label"] = "Steel", ["weight"] = 100, ["type"] = "item", ["image"] = "steel.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Nice piece of metal that you can probably use for something"}, - ["rubber"] = {["name"] = "rubber", ["label"] = "Rubber", ["weight"] = 100, ["type"] = "item", ["image"] = "rubber.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Rubber, I believe you can make your own rubber ducky with it :D"}, - ["glass"] = {["name"] = "glass", ["label"] = "Glass", ["weight"] = 100, ["type"] = "item", ["image"] = "glassplate.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "It is very fragile, watch out"}, - ["pistol_ammo"] = {["name"] = "pistol_ammo", ["label"] = "Pistol ammo", ["weight"] = 200, ["type"] = "item", ["image"] = "pistol_ammo.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Ammo for Pistols"}, - ["rifle_ammo"] = {["name"] = "rifle_ammo", ["label"] = "Rifle ammo", ["weight"] = 1000, ["type"] = "item", ["image"] = "rifle_ammo.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Ammo for Rifles"}, - ["smg_ammo"] = {["name"] = "smg_ammo", ["label"] = "SMG ammo", ["weight"] = 500, ["type"] = "item", ["image"] = "smg_ammo.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Ammo for Sub Machine Guns"}, - ["shotgun_ammo"] = {["name"] = "shotgun_ammo", ["label"] = "Shotgun ammo", ["weight"] = 500, ["type"] = "item", ["image"] = "shotgun_ammo.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Ammo for Shotguns"}, - ["mg_ammo"] = {["name"] = "mg_ammo", ["label"] = "MG ammo", ["weight"] = 1000, ["type"] = "item", ["image"] = "mg_ammo.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Ammo for Machine Guns"}, - ["snp_ammo"] = {["name"] = "snp_ammo", ["label"] = "Sniper ammo", ["weight"] = 1000, ["type"] = "item", ["image"] = "snp_ammo.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Ammo for Sniper Rifles"}, - ["lockpick"] = {["name"] = "lockpick", ["label"] = "Lockpick", ["weight"] = 300, ["type"] = "item", ["image"] = "lockpick.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = {accept = {"screwdriverset"}, reward = "advancedlockpick", anim = {["dict"] = "anim@amb@business@weed@weed_inspecting_high_dry@", ["lib"] = "weed_inspecting_high_base_inspector", ["text"] = "Crafting lockpick", ["timeOut"] = 7500,}}, ["description"] = "Very useful if you lose your keys a lot.. or if you want to use it for something else..."}, - ["advancedlockpick"] = {["name"] = "advancedlockpick", ["label"] = "Advanced Lockpick", ["weight"] = 500, ["type"] = "item", ["image"] = "advancedlockpick.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "If you lose your keys a lot this is very useful... Also useful to open your beers"}, - ["repairkit"] = {["name"] = "repairkit", ["label"] = "Repairkit", ["weight"] = 2500, ["type"] = "item", ["image"] = "repairkit.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A nice toolbox with stuff to repair your vehicle"}, - ["advancedrepairkit"] = {["name"] = "advancedrepairkit", ["label"] = "Advanced Repairkit", ["weight"] = 4000, ["type"] = "item", ["image"] = "advancedkit.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A nice toolbox with stuff to repair your vehicle"}, - ["cleaningkit"] = {["name"] = "cleaningkit", ["label"] = "Cleaning Kit", ["weight"] = 250, ["type"] = "item", ["image"] = "cleaningkit.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A microfiber cloth with some soap will let your car sparkle again!"}, - ["screwdriverset"] = {["name"] = "screwdriverset", ["label"] = "Toolkit", ["weight"] = 1000, ["type"] = "item", ["image"] = "screwdriverset.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Very useful to screw... screws..."}, - ["drill"] = {["name"] = "drill", ["label"] = "Drill", ["weight"] = 20000, ["type"] = "item", ["image"] = "drill.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "The real deal..."}, - ["weed_white-widow"] = {["name"] = "weed_white-widow", ["label"] = "White Widow 2g", ["weight"] = 200, ["type"] = "item", ["image"] = "weed-baggie.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "A weed bag with 2g White Widow"}, - ["weed_skunk"] = {["name"] = "weed_skunk", ["label"] = "Skunk 2g", ["weight"] = 200, ["type"] = "item", ["image"] = "weed-baggie.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "A weed bag with 2g Skunk"}, - ["weed_purple-haze"] = {["name"] = "weed_purple-haze", ["label"] = "Purple Haze 2g", ["weight"] = 200, ["type"] = "item", ["image"] = "weed-baggie.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "A weed bag with 2g Purple Haze"}, - ["weed_og-kush"] = {["name"] = "weed_og-kush", ["label"] = "OGKush 2g", ["weight"] = 200, ["type"] = "item", ["image"] = "weed-baggie.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "A weed bag with 2g OG Kush"}, - ["weed_amnesia"] = {["name"] = "weed_amnesia", ["label"] = "Amnesia 2g", ["weight"] = 200, ["type"] = "item", ["image"] = "weed-baggie.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "A weed bag with 2g Amnesia"}, - ["weed_ak47"] = {["name"] = "weed_ak47", ["label"] = "AK47 2g", ["weight"] = 200, ["type"] = "item", ["image"] = "weed-baggie.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "A weed bag with 2g AK47"}, - ["weed_white-widow_seed"] = {["name"] = "weed_white-widow_seed", ["label"] = "White Widow Seed", ["weight"] = 0, ["type"] = "item", ["image"] = "weed-plant-seed.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "A weed seed of White Widow"}, - ["weed_skunk_seed"] = {["name"] = "weed_skunk_seed", ["label"] = "Skunk Seed", ["weight"] = 0, ["type"] = "item", ["image"] = "weed-plant-seed.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A weed seed of Skunk"}, - ["weed_purple-haze_seed"] = {["name"] = "weed_purple-haze_seed", ["label"] = "Purple Haze Seed", ["weight"] = 0, ["type"] = "item", ["image"] = "weed-plant-seed.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A weed seed of Purple Haze"}, - ["weed_og-kush_seed"] = {["name"] = "weed_og-kush_seed", ["label"] = "OGKush Seed", ["weight"] = 0, ["type"] = "item", ["image"] = "weed-plant-seed.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A weed seed of OG Kush"}, - ["weed_amnesia_seed"] = {["name"] = "weed_amnesia_seed", ["label"] = "Amnesia Seed", ["weight"] = 0, ["type"] = "item", ["image"] = "weed-plant-seed.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A weed seed of Amnesia"}, - ["weed_ak47_seed"] = {["name"] = "weed_ak47_seed", ["label"] = "AK47 Seed", ["weight"] = 0, ["type"] = "item", ["image"] = "weed-plant-seed.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A weed seed of AK47"}, - ["empty_weed_bag"] = {["name"] = "empty_weed_bag", ["label"] = "Empty Weed Bag", ["weight"] = 0, ["type"] = "item", ["image"] = "weed-empty-bag.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A small empty bag"}, - ["weed_nutrition"] = {["name"] = "weed_nutrition", ["label"] = "Plant Fertilizer", ["weight"] = 2000, ["type"] = "item", ["image"] = "weed_nutrition.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Plant nutrition"}, - ["handcuffs"] = {["name"] = "handcuffs", ["label"] = "Handcuffs", ["weight"] = 100, ["type"] = "item", ["image"] = "handcuffs.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Comes in handy when people misbehave. Maybe it can be used for something else?"}, - ["tunerlaptop"] = {["name"] = "tunerlaptop", ["label"] = "Tunerchip", ["weight"] = 2000, ["type"] = "item", ["image"] = "tunerlaptop.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "With this tunerchip you can get your car on steroids... If you know what you're doing"}, - ["empty_evidence_bag"] = {["name"] = "empty_evidence_bag", ["label"] = "Empty Evidence Bag", ["weight"] = 0, ["type"] = "item", ["image"] = "evidence.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Used a lot to keep DNA from blood, bullet shells and more"}, - ["filled_evidence_bag"] = {["name"] = "filled_evidence_bag", ["label"] = "Evidence Bag", ["weight"] = 200, ["type"] = "item", ["image"] = "evidence.png", ["unique"] = true, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "A filled evidence bag to see who committed the crime >:("}, - ["armor"] = {["name"] = "armor", ["label"] = "Armor", ["weight"] = 5000, ["type"] = "item", ["image"] = "armor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Some protection won't hurt... right?"}, - ["heavyarmor"] = {["name"] = "heavyarmor", ["label"] = "Heavy Armor", ["weight"] = 5000, ["type"] = "item", ["image"] = "armor.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Some protection won't hurt... right?"}, - ["weed_brick"] = {["name"] = "weed_brick", ["label"] = "Weed Brick", ["weight"] = 1000, ["type"] = "item", ["image"] = "weed_brick.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "1KG Weed Brick to sell to large customers."}, - ["coke_brick"] = {["name"] = "coke_brick", ["label"] = "Coke Brick", ["weight"] = 1000, ["type"] = "item", ["image"] = "coke_brick.png", ["unique"] = true, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Heavy package of cocaine, mostly used for deals and takes a lot of space"}, - ["coke_small_brick"] = {["name"] = "coke_small_brick", ["label"] = "Coke Package", ["weight"] = 350, ["type"] = "item", ["image"] = "coke_small_brick.png", ["unique"] = true, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Small package of cocaine, mostly used for deals and takes a lot of space"}, - ["sandwich"] = {["name"] = "sandwich", ["label"] = "Sandwich", ["weight"] = 200, ["type"] = "item", ["image"] = "sandwich.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Nice bread for your stomach"}, - ["electronickit"] = {["name"] = "electronickit", ["label"] = "Electronic Kit", ["weight"] = 100, ["type"] = "item", ["image"] = "electronickit.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = {accept = {"gatecrack"}, reward = "trojan_usb", anim = nil}, ["description"] = "If you've always wanted to build a robot you can maybe start here. Maybe you'll be the new Elon Musk?"}, - ["gatecrack"] = {["name"] = "gatecrack", ["label"] = "Gatecrack", ["weight"] = 0, ["type"] = "item", ["image"] = "usb_device.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Handy software to tear down some fences"}, - ["rolex"] = {["name"] = "rolex", ["label"] = "Golden Watch", ["weight"] = 1500, ["type"] = "item", ["image"] = "rolex_watch.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A golden watch seems like the jackpot to me!"}, - ["diamond_ring"] = {["name"] = "diamond_ring", ["label"] = "Diamond Ring", ["weight"] = 1500, ["type"] = "item", ["image"] = "diamond_ring.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A diamond ring seems like the jackpot to me!"}, - ["goldchain"] = {["name"] = "goldchain", ["label"] = "Golden Chain", ["weight"] = 1500, ["type"] = "item", ["image"] = "goldchain.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A golden chain seems like the jackpot to me!"}, - ["10kgoldchain"] = {["name"] = "10kgoldchain", ["label"] = "10k Gold Chain", ["weight"] = 2000, ["type"] = "item", ["image"] = "10kgoldchain.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "10 carat golden chain"}, - ["trojan_usb"] = {["name"] = "trojan_usb", ["label"] = "Trojan USB", ["weight"] = 0, ["type"] = "item", ["image"] = "usb_device.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Handy software to shut down some systems"}, - ["security_card_01"] = {["name"] = "security_card_01", ["label"] = "Security Card A", ["weight"] = 0, ["type"] = "item", ["image"] = "security_card_01.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A security card... I wonder what it goes to"}, - ["security_card_02"] = {["name"] = "security_card_02", ["label"] = "Security Card B", ["weight"] = 0, ["type"] = "item", ["image"] = "security_card_02.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A security card... I wonder what it goes to"}, - ["police_stormram"] = {["name"] = "police_stormram", ["label"] = "Stormram", ["weight"] = 18000, ["type"] = "item", ["image"] = "police_stormram.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A nice tool to break into doors"}, - ["rolling_paper"] = {["name"] = "rolling_paper", ["label"] = "Rolling Paper", ["weight"] = 0, ["type"] = "item", ["image"] = "rolling_paper.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = {accept = {"weed_white-widow", "weed_skunk", "weed_purple-haze", "weed_og-kush", "weed_amnesia", "weed_ak47"}, reward = "joint", anim = {["dict"] = "anim@amb@business@weed@weed_inspecting_high_dry@", ["lib"] = "weed_inspecting_high_base_inspector", ["text"] = "Rolling joint", ["timeOut"] = 5000,}}, ["description"] = "Paper made specifically for encasing and smoking tobacco or cannabis."}, - ["radio"] = {["name"] = "radio", ["label"] = "Radio", ["weight"] = 2000, ["type"] = "item", ["image"] = "radio.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "You can communicate with this through a signal"}, - ["stickynote"] = {["name"] = "stickynote", ["label"] = "Sticky note", ["weight"] = 0, ["type"] = "item", ["image"] = "stickynote.png", ["unique"] = true, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Sometimes handy to remember something :)"}, - ["phone"] = {["name"] = "phone", ["label"] = "Phone", ["weight"] = 700, ["type"] = "item", ["image"] = "phone.png", ["unique"] = true, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Neat phone ya got there"}, - ["fitbit"] = {["name"] = "fitbit", ["label"] = "Fitbit", ["weight"] = 500, ["type"] = "item", ["image"] = "fitbit.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "I like fitbit"}, - ["thermite"] = {["name"] = "thermite", ["label"] = "Thermite", ["weight"] = 1000, ["type"] = "item", ["image"] = "thermite.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Sometimes you'd wish for everything to burn"}, - ["goldbar"] = {["name"] = "goldbar", ["label"] = "Gold Bar", ["weight"] = 7000, ["type"] = "item", ["image"] = "goldbar.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Looks pretty expensive to me"}, - ["cryptostick"] = {["name"] = "cryptostick", ["label"] = "Crypto Stick", ["weight"] = 200, ["type"] = "item", ["image"] = "cryptostick.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Why would someone ever buy money that doesn't exist.. How many would it contain..?"}, - ["radioscanner"] = {["name"] = "radioscanner", ["label"] = "Radio Scanner", ["weight"] = 1000, ["type"] = "item", ["image"] = "radioscanner.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "With this you can get some police alerts. Not 100% effective however"}, - ["dendrogyra_coral"] = {["name"] = "dendrogyra_coral", ["label"] = "Dendrogyra", ["weight"] = 1000, ["type"] = "item", ["image"] = "dendrogyra_coral.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Its also known as pillar coral"}, - ["antipatharia_coral"] = {["name"] = "antipatharia_coral", ["label"] = "Antipatharia", ["weight"] = 1000, ["type"] = "item", ["image"] = "antipatharia_coral.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Its also known as black corals or thorn corals"}, - ["jerry_can"] = {["name"] = "jerry_can", ["label"] = "Jerrycan 20L", ["weight"] = 20000, ["type"] = "item", ["image"] = "jerry_can.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A can full of Fuel"}, - ["moneybag"] = {["name"] = "moneybag", ["label"] = "Money Bag", ["weight"] = 0, ["type"] = "item", ["image"] = "moneybag.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A bag with cash"}, - ["diving_gear"] = {["name"] = "diving_gear", ["label"] = "Diving Gear", ["weight"] = 30000, ["type"] = "item", ["image"] = "diving_gear.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "An oxygen tank and a rebreather"}, - ["parachute"] = {["name"] = "parachute", ["label"] = "Parachute", ["weight"] = 30000, ["type"] = "item", ["image"] = "parachute.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "The sky is the limit! Woohoo!"}, - ["snspistol_part_1"] = {["name"] = "snspistol_part_1", ["label"] = "SNS Loop", ["weight"] = 1500, ["type"] = "item", ["image"] = "snspistol_part_1.png", ["unique"] = true, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Loop of a SNS Pistol"}, - ["snspistol_part_2"] = {["name"] = "snspistol_part_2", ["label"] = "SNS Trigger", ["weight"] = 1500, ["type"] = "item", ["image"] = "snspistol_part_2.png", ["unique"] = true, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Trigger of a SNS Pistol"}, - ["snspistol_part_3"] = {["name"] = "snspistol_part_3", ["label"] = "SNS Clip", ["weight"] = 1500, ["type"] = "item", ["image"] = "snspistol_part_3.png", ["unique"] = true, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = {accept = {"snspistol_part_1"}, reward = "snspistol_stage_1", anim = {["dict"] = "anim@amb@business@weed@weed_inspecting_high_dry@", ["lib"] = "weed_inspecting_high_base_inspector", ["text"] = "Atttaching attachments", ["timeOut"] = 15000,}}, ["description"] = "Clip of a SNS Pistol"}, - ["snspistol_stage_1"] = {["name"] = "snspistol_stage_1", ["label"] = "SNS Body", ["weight"] = 2500, ["type"] = "item", ["image"] = "snspistol_stage_1.png", ["unique"] = true, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = {accept = {"snspistol_part_2"}, reward = "weapon_snspistol", anim = {["dict"] = "anim@amb@business@weed@weed_inspecting_high_dry@", ["lib"] = "weed_inspecting_high_base_inspector", ["text"] = "Attaching attachments", ["timeOut"] = 15000,}}, ["description"] = "SNS w/ Loop & Clip"}, - ["bandage"] = {["name"] = "bandage", ["label"] = "Bandage", ["weight"] = 0, ["type"] = "item", ["image"] = "bandage.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A bandage works every time"}, - ["painkillers"] = {["name"] = "painkillers", ["label"] = "Painkillers", ["weight"] = 0, ["type"] = "item", ["image"] = "painkillers.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "For pain you can't stand anymore, take this pill that'd make you feel great again"}, - ["binoculars"] = {["name"] = "binoculars", ["label"] = "Binoculars", ["weight"] = 600, ["type"] = "item", ["image"] = "binoculars.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Sneaky Breaky..."}, - ["snowball"] = {["name"] = "snowball", ["label"] = "Snowball", ["weight"] = 0, ["type"] = "item", ["image"] = "snowball.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Should have catched it :D"}, - ["firework1"] = {["name"] = "firework1", ["label"] = "2Brothers", ["weight"] = 1000, ["type"] = "item", ["image"] = "firework1.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Fireworks"}, - ["firework2"] = {["name"] = "firework2", ["label"] = "Poppelers", ["weight"] = 1000, ["type"] = "item", ["image"] = "firework2.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Fireworks"}, - ["firework3"] = {["name"] = "firework3", ["label"] = "WipeOut", ["weight"] = 1000, ["type"] = "item", ["image"] = "firework3.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Fireworks"}, - ["firework4"] = {["name"] = "firework4", ["label"] = "Weeping Willow", ["weight"] = 1000, ["type"] = "item", ["image"] = "firework4.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Fireworks"}, - ["iphone"] = {["name"] = "iphone", ["label"] = "iPhone", ["weight"] = 1000, ["type"] = "item", ["image"] = "iphone.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Very expensive phone"}, - ["samsungphone"] = {["name"] = "samsungphone", ["label"] = "Samsung S10", ["weight"] = 1000, ["type"] = "item", ["image"] = "samsungphone.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Very expensive phone"}, - ["laptop"] = {["name"] = "laptop", ["label"] = "Laptop", ["weight"] = 4000, ["type"] = "item", ["image"] = "laptop.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Expensive laptop"}, - ["tablet"] = {["name"] = "tablet", ["label"] = "Tablet", ["weight"] = 2000, ["type"] = "item", ["image"] = "tablet.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Expensive tablet"}, - ["lighter"] = {["name"] = "lighter", ["label"] = "Lighter", ["weight"] = 0, ["type"] = "item", ["image"] = "lighter.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "On new years eve a nice fire to stand next to"}, - ["certificate"] = {["name"] = "certificate", ["label"] = "Certificate", ["weight"] = 0, ["type"] = "item", ["image"] = "certificate.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Certificate that proves you own certain stuff"}, - ["nitrous"] = {["name"] = "nitrous", ["label"] = "Nitrous", ["weight"] = 1000, ["type"] = "item", ["image"] = "nitrous.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Speed up, gas pedal! :D"}, - ["walkstick"] = {["name"] = "walkstick", ["label"] = "Walking Stick", ["weight"] = 1000, ["type"] = "item", ["image"] = "walkstick.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Walking stick for ya'll grannies out there.. HAHA"}, - ["harness"] = {["name"] = "harness", ["label"] = "Race Harness", ["weight"] = 1000, ["type"] = "item", ["image"] = "harness.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Racing Harness so no matter what you stay in the car"}, - ["markedbills"] = {["name"] = "markedbills", ["label"] = "Marked Money", ["weight"] = 1000, ["type"] = "item", ["image"] = "markedbills.png", ["unique"] = true, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Money?"}, - ["labkey"] = {["name"] = "labkey", ["label"] = "Key", ["weight"] = 500, ["type"] = "item", ["image"] = "labkey.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Key for a lock...?"}, - ["pinger"] = {["name"] = "pinger", ["label"] = "Pinger", ["weight"] = 1000, ["type"] = "item", ["image"] = "pinger.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "With a pinger and your phone you can send out your location"}, - ["firstaid"] = {["name"] = "firstaid", ["label"] = "First Aid", ["weight"] = 2500, ["type"] = "item", ["image"] = "firstaid.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "You can use this First Aid kit to get people back on their feet"}, - ["printerdocument"] = {["name"] = "printerdocument", ["label"] = "Document", ["weight"] = 500, ["type"] = "item", ["image"] = "printerdocument.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A nice document"}, - ["weaponlicense"] = {["name"] = "weaponlicense", ["label"] = "Weapon License", ["weight"] = 0, ["type"] = "item", ["image"] = "weapon_license.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Weapon License"}, - ["oxy"] = {["name"] = "oxy", ["label"] = "Prescription Oxy", ["weight"] = 0, ["type"] = "item", ["image"] = "oxy.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "The Label Has Been Ripped Off"}, - ["visa"] = {["name"] = "visa", ["label"] = "Visa Card", ["weight"] = 0, ["type"] = "item", ["image"] = "visacard.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Visa can be used via ATM"}, - ["mastercard"] = {["name"] = "mastercard", ["label"] = "Master Card", ["weight"] = 0, ["type"] = "item", ["image"] = "mastercard.png", ["unique"] = true, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "MasterCard can be used via ATM"}, - ["ephedrine"] = {["name"] = "ephedrine", ["label"] = "Ephedrine", ["weight"] = 200, ["type"] = "item", ["image"] = "chemical1.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Prescription medicine used to treat the symptoms of low blood pressure"}, - ["hydrochloricacid"] = {["name"] = "hydrochloricacid", ["label"] = "Hydrochloric Acid", ["weight"] = 200, ["type"] = "item", ["image"] = "chemical1.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Component of the gastric acid in the digestive systems of most animal species...including humans"}, - ["acetone"] = {["name"] = "acetone", ["label"] = "Acetone", ["weight"] = 200, ["type"] = "item", ["image"] = "chemical2.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Breathing moderate amounts for a short amount of time can irritate your nose, throat, lungs and eyes"}, - ["puremeth"] = {["name"] = "puremeth", ["label"] = "Pure Meth", ["weight"] = 100, ["type"] = "item", ["image"] = "meth10g.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A baggie of Pure Meth"}, - ["meth"] = {["name"] = "meth", ["label"] = "Meth", ["weight"] = 100, ["type"] = "item", ["image"] = "meth10g.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A baggie of Meth"}, - ["methtray"] = {["name"] = "methtray", ["label"] = "Meth Tray", ["weight"] = 200, ["type"] = "item", ["image"] = "methbrick.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "make some meth"}, - ["puremethtray"] = {["name"] = "puremethtray", ["label"] = "Pure Meth Tray", ["weight"] = 200, ["type"] = "item", ["image"] = "methbrick.png", ["unique"] = false, ["useable"] = false, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "make some meth"}, - ["grape"] = {["name"] = "grape", ["label"] = "Grape", ["weight"] = 100, ["type"] = "item", ["image"] = "grape.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Mmmmh yummie, grapes"}, - ["wine"] = {["name"] = "wine", ["label"] = "Wine", ["weight"] = 300, ["type"] = "item", ["image"] = "wine.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Some good wine to drink on a fine evening"}, - ["grapejuice"] = {["name"] = "grapejuice", ["label"] = "Grape Juice", ["weight"] = 200, ["type"] = "item", ["image"] = "grapejuice.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Grape juice is said to be healthy"}, - ["cocaleaf"] = {["name"] = "cocaleaf", ["label"] = "Cocaine Leaf", ["weight"] = 200, ["type"] = "item", ["image"] = "cocaineleaf.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = false, ["combinable"] = nil, ["description"] = "Make that white girl"}, - ["fish"] = {["name"] = "fish", ["label"] = "Fish", ["weight"] = 1100, ["type"] = "item", ["image"] = "fish.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A normal fish Tatses pretty good!"}, - ["killerwhalemeat"] = {["name"] = "killerwhalemeat", ["label"] = "Killer Whale Meat", ["weight"] = 1100, ["type"] = "item", ["image"] = "killerwhalemeat.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Meat cut from a Killer Whale"}, - ["stingraymeat"] = {["name"] = "stingraymeat", ["label"] = "Stingray Meat", ["weight"] = 1111, ["type"] = "item", ["image"] = "stingraymeat.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Stingray Meat"}, - ["tigersharkmeat"] = {["name"] = "tigersharkmeat", ["label"] = "Tigershark Meat", ["weight"] = 1111, ["type"] = "item", ["image"] = "tigersharkmeat.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Meat cut from a Tigershark"}, - ["catfish"] = {["name"] = "catfish", ["label"] = "Catfish", ["weight"] = 1111, ["type"] = "item", ["image"] = "catfish.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A Catfish"}, - ["salmon"] = {["name"] = "salmon", ["label"] = "Salmon", ["weight"] = 1111, ["type"] = "item", ["image"] = "salmon.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A Salmon Fish"}, - ["largemouthbass"] = {["name"] = "largemouthbass", ["label"] = "Largemouth Bass", ["weight"] = 1111, ["type"] = "item", ["image"] = "largemouthbass.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Fish for Fishing."}, - ["goldfish"] = {["name"] = "goldfish", ["label"] = "Goldfish", ["weight"] = 1111, ["type"] = "item", ["image"] = "goldfish.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A Goldfish... I wonder how he got there..."}, - ["redfish"] = {["name"] = "redfish", ["label"] = "Redfish", ["weight"] = 1111, ["type"] = "item", ["image"] = "redfish.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "One fish two fish..."}, - ["bluefish"] = {["name"] = "bluefish", ["label"] = "Bluefish", ["weight"] = 1111, ["type"] = "item", ["image"] = "bluefish.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "One fish two fish redfish..."}, - ["stripedbass"] = {["name"] = "stripedbass", ["label"] = "Striped Bass", ["weight"] = 1111, ["type"] = "item", ["image"] = "stripedbass.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A Striped Bass"}, - ["fishingrod"] = {["name"] = "fishingrod", ["label"] = "Fishing Rod", ["weight"] = 5000, ["type"] = "item", ["image"] = "fishingrod.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A fishing rod for adventures with friends!!"}, - ["fishingbait"] = {["name"] = "fishingbait", ["label"] = "Fish Bait", ["weight"] = 400, ["type"] = "item", ["image"] = "fishbait.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "A fish bait"}, + ['id_card'] = {['name'] = 'id_card', ['label'] = 'ID Card', ['weight'] = 0, ['type'] = 'item', ['image'] = 'id_card.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'A card containing all your information to identify yourself'}, + ['driver_license'] = {['name'] = 'driver_license', ['label'] = 'Drivers License', ['weight'] = 0, ['type'] = 'item', ['image'] = 'driver_license.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Permit to show you can drive a vehicle'}, + ['lawyerpass'] = {['name'] = 'lawyerpass', ['label'] = 'Lawyer Pass', ['weight'] = 0, ['type'] = 'item', ['image'] = 'lawyerpass.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Pass exclusive to lawyers to show they can represent a suspect'}, + ['tosti'] = {['name'] = 'tosti', ['label'] = 'Grilled Cheese Sandwich', ['weight'] = 200, ['type'] = 'item', ['image'] = 'tosti.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Nice to eat'}, + ['casinochips'] = {['name'] = 'casinochips', ['label'] = 'Casino Chips', ['weight'] = 0, ['type'] = 'item', ['image'] = 'casinochips.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Chips For Casino Gambling'}, + ['water_bottle'] = {['name'] = 'water_bottle', ['label'] = 'Bottle of Water', ['weight'] = 500, ['type'] = 'item', ['image'] = 'water_bottle.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'For all the thirsty out there'}, + ['beer'] = {['name'] = 'beer', ['label'] = 'Beer', ['weight'] = 500, ['type'] = 'item', ['image'] = 'beer.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Nothing like a good cold beer!'}, + ['whiskey'] = {['name'] = 'whiskey', ['label'] = 'Whiskey', ['weight'] = 500, ['type'] = 'item', ['image'] = 'whiskey.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'For all the thirsty out there'}, + ['vodka'] = {['name'] = 'vodka', ['label'] = 'Vodka', ['weight'] = 500, ['type'] = 'item', ['image'] = 'vodka.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'For all the thirsty out there'}, + ['coffee'] = {['name'] = 'coffee', ['label'] = 'Coffee', ['weight'] = 200, ['type'] = 'item', ['image'] = 'coffee.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Pump 4 Caffeine'}, + ['kurkakola'] = {['name'] = 'kurkakola', ['label'] = 'Cola', ['weight'] = 500, ['type'] = 'item', ['image'] = 'cola.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'For all the thirsty out there'}, + ['twerks_candy'] = {['name'] = 'twerks_candy', ['label'] = 'Twerks', ['weight'] = 100, ['type'] = 'item', ['image'] = 'twerks_candy.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Some delicious candy :O'}, + ['snikkel_candy'] = {['name'] = 'snikkel_candy', ['label'] = 'Snikkel', ['weight'] = 100, ['type'] = 'item', ['image'] = 'snikkel_candy.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Some delicious candy :O'}, + ['joint'] = {['name'] = 'joint', ['label'] = 'Joint', ['weight'] = 0, ['type'] = 'item', ['image'] = 'joint.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Sidney would be very proud at you'}, + ['cokebaggy'] = {['name'] = 'cokebaggy', ['label'] = 'Bag of Coke', ['weight'] = 0, ['type'] = 'item', ['image'] = 'cocaine_baggy.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'To get happy real quick'}, + ['crack_baggy'] = {['name'] = 'crack_baggy', ['label'] = 'Bag of Crack', ['weight'] = 0, ['type'] = 'item', ['image'] = 'crack_baggy.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'To get happy faster'}, + ['xtcbaggy'] = {['name'] = 'xtcbaggy', ['label'] = 'Bag of XTC', ['weight'] = 0, ['type'] = 'item', ['image'] = 'xtc_baggy.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Pop those pills baby'}, + ['plastic'] = {['name'] = 'plastic', ['label'] = 'Plastic', ['weight'] = 100, ['type'] = 'item', ['image'] = 'plastic.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'RECYCLE! - Greta Thunberg 2019'}, + ['metalscrap'] = {['name'] = 'metalscrap', ['label'] = 'Metal Scrap', ['weight'] = 100, ['type'] = 'item', ['image'] = 'metalscrap.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'You can probably make something nice out of this'}, + ['copper'] = {['name'] = 'copper', ['label'] = 'Copper', ['weight'] = 100, ['type'] = 'item', ['image'] = 'copper.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Nice piece of metal that you can probably use for something'}, + ['aluminum'] = {['name'] = 'aluminum', ['label'] = 'Aluminium', ['weight'] = 100, ['type'] = 'item', ['image'] = 'aluminum.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Nice piece of metal that you can probably use for something'}, + ['aluminumoxide'] = {['name'] = 'aluminumoxide', ['label'] = 'Aluminium Powder', ['weight'] = 100, ['type'] = 'item', ['image'] = 'aluminumoxide.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Some powder to mix with'}, + ['iron'] = {['name'] = 'iron', ['label'] = 'Iron', ['weight'] = 100, ['type'] = 'item', ['image'] = 'ironplate.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Handy piece of metal that you can probably use for something'}, + ['ironoxide'] = {['name'] = 'ironoxide', ['label'] = 'Iron Powder', ['weight'] = 100, ['type'] = 'item', ['image'] = 'ironoxide.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = {accept = {'aluminumoxide'}, reward = 'thermite', anim = {['dict'] = 'anim@amb@business@weed@weed_inspecting_high_dry@', ['lib'] = 'weed_inspecting_high_base_inspector', ['text'] = 'Mixing powder..', ['timeOut'] = 10000}}, ['description'] = 'Some powder to mix with.'}, + ['steel'] = {['name'] = 'steel', ['label'] = 'Steel', ['weight'] = 100, ['type'] = 'item', ['image'] = 'steel.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Nice piece of metal that you can probably use for something'}, + ['rubber'] = {['name'] = 'rubber', ['label'] = 'Rubber', ['weight'] = 100, ['type'] = 'item', ['image'] = 'rubber.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Rubber, I believe you can make your own rubber ducky with it :D'}, + ['glass'] = {['name'] = 'glass', ['label'] = 'Glass', ['weight'] = 100, ['type'] = 'item', ['image'] = 'glassplate.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'It is very fragile, watch out'}, + ['pistol_ammo'] = {['name'] = 'pistol_ammo', ['label'] = 'Pistol ammo', ['weight'] = 200, ['type'] = 'item', ['image'] = 'pistol_ammo.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Ammo for Pistols'}, + ['rifle_ammo'] = {['name'] = 'rifle_ammo', ['label'] = 'Rifle ammo', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'rifle_ammo.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Ammo for Rifles'}, + ['smg_ammo'] = {['name'] = 'smg_ammo', ['label'] = 'SMG ammo', ['weight'] = 500, ['type'] = 'item', ['image'] = 'smg_ammo.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Ammo for Sub Machine Guns'}, + ['shotgun_ammo'] = {['name'] = 'shotgun_ammo', ['label'] = 'Shotgun ammo', ['weight'] = 500, ['type'] = 'item', ['image'] = 'shotgun_ammo.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Ammo for Shotguns'}, + ['mg_ammo'] = {['name'] = 'mg_ammo', ['label'] = 'MG ammo', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'mg_ammo.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Ammo for Machine Guns'}, + ['snp_ammo'] = {['name'] = 'snp_ammo', ['label'] = 'Sniper ammo', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'snp_ammo.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Ammo for Sniper Rifles'}, + ['lockpick'] = {['name'] = 'lockpick', ['label'] = 'Lockpick', ['weight'] = 300, ['type'] = 'item', ['image'] = 'lockpick.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = {accept = {'screwdriverset'}, reward = 'advancedlockpick', anim = {['dict'] = 'anim@amb@business@weed@weed_inspecting_high_dry@', ['lib'] = 'weed_inspecting_high_base_inspector', ['text'] = 'Crafting lockpick', ['timeOut'] = 7500,}}, ['description'] = 'Very useful if you lose your keys a lot.. or if you want to use it for something else...'}, + ['advancedlockpick'] = {['name'] = 'advancedlockpick', ['label'] = 'Advanced Lockpick', ['weight'] = 500, ['type'] = 'item', ['image'] = 'advancedlockpick.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'If you lose your keys a lot this is very useful... Also useful to open your beers'}, + ['repairkit'] = {['name'] = 'repairkit', ['label'] = 'Repairkit', ['weight'] = 2500, ['type'] = 'item', ['image'] = 'repairkit.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A nice toolbox with stuff to repair your vehicle'}, + ['advancedrepairkit'] = {['name'] = 'advancedrepairkit', ['label'] = 'Advanced Repairkit', ['weight'] = 4000, ['type'] = 'item', ['image'] = 'advancedkit.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A nice toolbox with stuff to repair your vehicle'}, + ['cleaningkit'] = {['name'] = 'cleaningkit', ['label'] = 'Cleaning Kit', ['weight'] = 250, ['type'] = 'item', ['image'] = 'cleaningkit.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A microfiber cloth with some soap will let your car sparkle again!'}, + ['screwdriverset'] = {['name'] = 'screwdriverset', ['label'] = 'Toolkit', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'screwdriverset.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Very useful to screw... screws...'}, + ['drill'] = {['name'] = 'drill', ['label'] = 'Drill', ['weight'] = 20000, ['type'] = 'item', ['image'] = 'drill.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'The real deal...'}, + ['weed_white-widow'] = {['name'] = 'weed_white-widow', ['label'] = 'White Widow 2g', ['weight'] = 200, ['type'] = 'item', ['image'] = 'weed-baggie.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'A weed bag with 2g White Widow'}, + ['weed_skunk'] = {['name'] = 'weed_skunk', ['label'] = 'Skunk 2g', ['weight'] = 200, ['type'] = 'item', ['image'] = 'weed-baggie.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'A weed bag with 2g Skunk'}, + ['weed_purple-haze'] = {['name'] = 'weed_purple-haze', ['label'] = 'Purple Haze 2g', ['weight'] = 200, ['type'] = 'item', ['image'] = 'weed-baggie.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'A weed bag with 2g Purple Haze'}, + ['weed_og-kush'] = {['name'] = 'weed_og-kush', ['label'] = 'OGKush 2g', ['weight'] = 200, ['type'] = 'item', ['image'] = 'weed-baggie.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'A weed bag with 2g OG Kush'}, + ['weed_amnesia'] = {['name'] = 'weed_amnesia', ['label'] = 'Amnesia 2g', ['weight'] = 200, ['type'] = 'item', ['image'] = 'weed-baggie.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'A weed bag with 2g Amnesia'}, + ['weed_ak47'] = {['name'] = 'weed_ak47', ['label'] = 'AK47 2g', ['weight'] = 200, ['type'] = 'item', ['image'] = 'weed-baggie.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'A weed bag with 2g AK47'}, + ['weed_white-widow_seed'] = {['name'] = 'weed_white-widow_seed', ['label'] = 'White Widow Seed', ['weight'] = 0, ['type'] = 'item', ['image'] = 'weed-plant-seed.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'A weed seed of White Widow'}, + ['weed_skunk_seed'] = {['name'] = 'weed_skunk_seed', ['label'] = 'Skunk Seed', ['weight'] = 0, ['type'] = 'item', ['image'] = 'weed-plant-seed.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A weed seed of Skunk'}, + ['weed_purple-haze_seed'] = {['name'] = 'weed_purple-haze_seed', ['label'] = 'Purple Haze Seed', ['weight'] = 0, ['type'] = 'item', ['image'] = 'weed-plant-seed.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A weed seed of Purple Haze'}, + ['weed_og-kush_seed'] = {['name'] = 'weed_og-kush_seed', ['label'] = 'OGKush Seed', ['weight'] = 0, ['type'] = 'item', ['image'] = 'weed-plant-seed.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A weed seed of OG Kush'}, + ['weed_amnesia_seed'] = {['name'] = 'weed_amnesia_seed', ['label'] = 'Amnesia Seed', ['weight'] = 0, ['type'] = 'item', ['image'] = 'weed-plant-seed.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A weed seed of Amnesia'}, + ['weed_ak47_seed'] = {['name'] = 'weed_ak47_seed', ['label'] = 'AK47 Seed', ['weight'] = 0, ['type'] = 'item', ['image'] = 'weed-plant-seed.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A weed seed of AK47'}, + ['empty_weed_bag'] = {['name'] = 'empty_weed_bag', ['label'] = 'Empty Weed Bag', ['weight'] = 0, ['type'] = 'item', ['image'] = 'weed-empty-bag.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A small empty bag'}, + ['weed_nutrition'] = {['name'] = 'weed_nutrition', ['label'] = 'Plant Fertilizer', ['weight'] = 2000, ['type'] = 'item', ['image'] = 'weed_nutrition.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Plant nutrition'}, + ['handcuffs'] = {['name'] = 'handcuffs', ['label'] = 'Handcuffs', ['weight'] = 100, ['type'] = 'item', ['image'] = 'handcuffs.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Comes in handy when people misbehave. Maybe it can be used for something else?'}, + ['tunerlaptop'] = {['name'] = 'tunerlaptop', ['label'] = 'Tunerchip', ['weight'] = 2000, ['type'] = 'item', ['image'] = 'tunerlaptop.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'With this tunerchip you can get your car on steroids... If you know what you\'re doing'}, + ['empty_evidence_bag'] = {['name'] = 'empty_evidence_bag', ['label'] = 'Empty Evidence Bag', ['weight'] = 0, ['type'] = 'item', ['image'] = 'evidence.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Used a lot to keep DNA from blood, bullet shells and more'}, + ['filled_evidence_bag'] = {['name'] = 'filled_evidence_bag', ['label'] = 'Evidence Bag', ['weight'] = 200, ['type'] = 'item', ['image'] = 'evidence.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'A filled evidence bag to see who committed the crime >:('}, + ['armor'] = {['name'] = 'armor', ['label'] = 'Armor', ['weight'] = 5000, ['type'] = 'item', ['image'] = 'armor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Some protection won\'t hurt... right?'}, + ['heavyarmor'] = {['name'] = 'heavyarmor', ['label'] = 'Heavy Armor', ['weight'] = 5000, ['type'] = 'item', ['image'] = 'armor.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Some protection won\'t hurt... right?'}, + ['weed_brick'] = {['name'] = 'weed_brick', ['label'] = 'Weed Brick', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'weed_brick.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = '1KG Weed Brick to sell to large customers.'}, + ['coke_brick'] = {['name'] = 'coke_brick', ['label'] = 'Coke Brick', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'coke_brick.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Heavy package of cocaine, mostly used for deals and takes a lot of space'}, + ['coke_small_brick'] = {['name'] = 'coke_small_brick', ['label'] = 'Coke Package', ['weight'] = 350, ['type'] = 'item', ['image'] = 'coke_small_brick.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Small package of cocaine, mostly used for deals and takes a lot of space'}, + ['sandwich'] = {['name'] = 'sandwich', ['label'] = 'Sandwich', ['weight'] = 200, ['type'] = 'item', ['image'] = 'sandwich.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Nice bread for your stomach'}, + ['electronickit'] = {['name'] = 'electronickit', ['label'] = 'Electronic Kit', ['weight'] = 100, ['type'] = 'item', ['image'] = 'electronickit.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = {accept = {'gatecrack'}, reward = 'trojan_usb', anim = nil}, ['description'] = 'If you\'ve always wanted to build a robot you can maybe start here. Maybe you\'ll be the new Elon Musk?'}, + ['gatecrack'] = {['name'] = 'gatecrack', ['label'] = 'Gatecrack', ['weight'] = 0, ['type'] = 'item', ['image'] = 'usb_device.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Handy software to tear down some fences'}, + ['rolex'] = {['name'] = 'rolex', ['label'] = 'Golden Watch', ['weight'] = 1500, ['type'] = 'item', ['image'] = 'rolex_watch.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A golden watch seems like the jackpot to me!'}, + ['diamond_ring'] = {['name'] = 'diamond_ring', ['label'] = 'Diamond Ring', ['weight'] = 1500, ['type'] = 'item', ['image'] = 'diamond_ring.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A diamond ring seems like the jackpot to me!'}, + ['goldchain'] = {['name'] = 'goldchain', ['label'] = 'Golden Chain', ['weight'] = 1500, ['type'] = 'item', ['image'] = 'goldchain.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A golden chain seems like the jackpot to me!'}, + ['10kgoldchain'] = {['name'] = '10kgoldchain', ['label'] = '10k Gold Chain', ['weight'] = 2000, ['type'] = 'item', ['image'] = '10kgoldchain.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = '10 carat golden chain'}, + ['trojan_usb'] = {['name'] = 'trojan_usb', ['label'] = 'Trojan USB', ['weight'] = 0, ['type'] = 'item', ['image'] = 'usb_device.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Handy software to shut down some systems'}, + ['security_card_01'] = {['name'] = 'security_card_01', ['label'] = 'Security Card A', ['weight'] = 0, ['type'] = 'item', ['image'] = 'security_card_01.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A security card... I wonder what it goes to'}, + ['security_card_02'] = {['name'] = 'security_card_02', ['label'] = 'Security Card B', ['weight'] = 0, ['type'] = 'item', ['image'] = 'security_card_02.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A security card... I wonder what it goes to'}, + ['police_stormram'] = {['name'] = 'police_stormram', ['label'] = 'Stormram', ['weight'] = 18000, ['type'] = 'item', ['image'] = 'police_stormram.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A nice tool to break into doors'}, + ['rolling_paper'] = {['name'] = 'rolling_paper', ['label'] = 'Rolling Paper', ['weight'] = 0, ['type'] = 'item', ['image'] = 'rolling_paper.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = {accept = {'weed_white-widow', 'weed_skunk', 'weed_purple-haze', 'weed_og-kush', 'weed_amnesia', 'weed_ak47'}, reward = 'joint', anim = {['dict'] = 'anim@amb@business@weed@weed_inspecting_high_dry@', ['lib'] = 'weed_inspecting_high_base_inspector', ['text'] = 'Rolling joint', ['timeOut'] = 5000,}}, ['description'] = 'Paper made specifically for encasing and smoking tobacco or cannabis.'}, + ['radio'] = {['name'] = 'radio', ['label'] = 'Radio', ['weight'] = 2000, ['type'] = 'item', ['image'] = 'radio.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'You can communicate with this through a signal'}, + ['stickynote'] = {['name'] = 'stickynote', ['label'] = 'Sticky note', ['weight'] = 0, ['type'] = 'item', ['image'] = 'stickynote.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Sometimes handy to remember something :)'}, + ['phone'] = {['name'] = 'phone', ['label'] = 'Phone', ['weight'] = 700, ['type'] = 'item', ['image'] = 'phone.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Neat phone ya got there'}, + ['fitbit'] = {['name'] = 'fitbit', ['label'] = 'Fitbit', ['weight'] = 500, ['type'] = 'item', ['image'] = 'fitbit.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'I like fitbit'}, + ['thermite'] = {['name'] = 'thermite', ['label'] = 'Thermite', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'thermite.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Sometimes you\'d wish for everything to burn'}, + ['goldbar'] = {['name'] = 'goldbar', ['label'] = 'Gold Bar', ['weight'] = 7000, ['type'] = 'item', ['image'] = 'goldbar.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Looks pretty expensive to me'}, + ['cryptostick'] = {['name'] = 'cryptostick', ['label'] = 'Crypto Stick', ['weight'] = 200, ['type'] = 'item', ['image'] = 'cryptostick.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Why would someone ever buy money that doesn\'t exist.. How many would it contain..?'}, + ['radioscanner'] = {['name'] = 'radioscanner', ['label'] = 'Radio Scanner', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'radioscanner.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'With this you can get some police alerts. Not 100% effective however'}, + ['dendrogyra_coral'] = {['name'] = 'dendrogyra_coral', ['label'] = 'Dendrogyra', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'dendrogyra_coral.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Its also known as pillar coral'}, + ['antipatharia_coral'] = {['name'] = 'antipatharia_coral', ['label'] = 'Antipatharia', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'antipatharia_coral.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Its also known as black corals or thorn corals'}, + ['jerry_can'] = {['name'] = 'jerry_can', ['label'] = 'Jerrycan 20L', ['weight'] = 20000, ['type'] = 'item', ['image'] = 'jerry_can.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A can full of Fuel'}, + ['moneybag'] = {['name'] = 'moneybag', ['label'] = 'Money Bag', ['weight'] = 0, ['type'] = 'item', ['image'] = 'moneybag.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A bag with cash'}, + ['diving_gear'] = {['name'] = 'diving_gear', ['label'] = 'Diving Gear', ['weight'] = 30000, ['type'] = 'item', ['image'] = 'diving_gear.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'An oxygen tank and a rebreather'}, + ['parachute'] = {['name'] = 'parachute', ['label'] = 'Parachute', ['weight'] = 30000, ['type'] = 'item', ['image'] = 'parachute.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'The sky is the limit! Woohoo!'}, + ['snspistol_part_1'] = {['name'] = 'snspistol_part_1', ['label'] = 'SNS Loop', ['weight'] = 1500, ['type'] = 'item', ['image'] = 'snspistol_part_1.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Loop of a SNS Pistol'}, + ['snspistol_part_2'] = {['name'] = 'snspistol_part_2', ['label'] = 'SNS Trigger', ['weight'] = 1500, ['type'] = 'item', ['image'] = 'snspistol_part_2.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Trigger of a SNS Pistol'}, + ['snspistol_part_3'] = {['name'] = 'snspistol_part_3', ['label'] = 'SNS Clip', ['weight'] = 1500, ['type'] = 'item', ['image'] = 'snspistol_part_3.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = {accept = {'snspistol_part_1'}, reward = 'snspistol_stage_1', anim = {['dict'] = 'anim@amb@business@weed@weed_inspecting_high_dry@', ['lib'] = 'weed_inspecting_high_base_inspector', ['text'] = 'Atttaching attachments', ['timeOut'] = 15000,}}, ['description'] = 'Clip of a SNS Pistol'}, + ['snspistol_stage_1'] = {['name'] = 'snspistol_stage_1', ['label'] = 'SNS Body', ['weight'] = 2500, ['type'] = 'item', ['image'] = 'snspistol_stage_1.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = {accept = {'snspistol_part_2'}, reward = 'weapon_snspistol', anim = {['dict'] = 'anim@amb@business@weed@weed_inspecting_high_dry@', ['lib'] = 'weed_inspecting_high_base_inspector', ['text'] = 'Attaching attachments', ['timeOut'] = 15000,}}, ['description'] = 'SNS w/ Loop & Clip'}, + ['bandage'] = {['name'] = 'bandage', ['label'] = 'Bandage', ['weight'] = 0, ['type'] = 'item', ['image'] = 'bandage.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A bandage works every time'}, + ['painkillers'] = {['name'] = 'painkillers', ['label'] = 'Painkillers', ['weight'] = 0, ['type'] = 'item', ['image'] = 'painkillers.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'For pain you can\'t stand anymore, take this pill that\'d make you feel great again'}, + ['binoculars'] = {['name'] = 'binoculars', ['label'] = 'Binoculars', ['weight'] = 600, ['type'] = 'item', ['image'] = 'binoculars.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Sneaky Breaky...'}, + ['snowball'] = {['name'] = 'snowball', ['label'] = 'Snowball', ['weight'] = 0, ['type'] = 'item', ['image'] = 'snowball.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Should have catched it :D'}, + ['firework1'] = {['name'] = 'firework1', ['label'] = '2Brothers', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'firework1.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Fireworks'}, + ['firework2'] = {['name'] = 'firework2', ['label'] = 'Poppelers', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'firework2.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Fireworks'}, + ['firework3'] = {['name'] = 'firework3', ['label'] = 'WipeOut', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'firework3.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Fireworks'}, + ['firework4'] = {['name'] = 'firework4', ['label'] = 'Weeping Willow', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'firework4.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Fireworks'}, + ['iphone'] = {['name'] = 'iphone', ['label'] = 'iPhone', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'iphone.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Very expensive phone'}, + ['samsungphone'] = {['name'] = 'samsungphone', ['label'] = 'Samsung S10', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'samsungphone.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Very expensive phone'}, + ['laptop'] = {['name'] = 'laptop', ['label'] = 'Laptop', ['weight'] = 4000, ['type'] = 'item', ['image'] = 'laptop.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Expensive laptop'}, + ['tablet'] = {['name'] = 'tablet', ['label'] = 'Tablet', ['weight'] = 2000, ['type'] = 'item', ['image'] = 'tablet.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Expensive tablet'}, + ['lighter'] = {['name'] = 'lighter', ['label'] = 'Lighter', ['weight'] = 0, ['type'] = 'item', ['image'] = 'lighter.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'On new years eve a nice fire to stand next to'}, + ['certificate'] = {['name'] = 'certificate', ['label'] = 'Certificate', ['weight'] = 0, ['type'] = 'item', ['image'] = 'certificate.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Certificate that proves you own certain stuff'}, + ['nitrous'] = {['name'] = 'nitrous', ['label'] = 'Nitrous', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'nitrous.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Speed up, gas pedal! :D'}, + ['walkstick'] = {['name'] = 'walkstick', ['label'] = 'Walking Stick', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'walkstick.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Walking stick for ya\'ll grannies out there.. HAHA'}, + ['harness'] = {['name'] = 'harness', ['label'] = 'Race Harness', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'harness.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Racing Harness so no matter what you stay in the car'}, + ['markedbills'] = {['name'] = 'markedbills', ['label'] = 'Marked Money', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'markedbills.png', ['unique'] = true, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Money?'}, + ['labkey'] = {['name'] = 'labkey', ['label'] = 'Key', ['weight'] = 500, ['type'] = 'item', ['image'] = 'labkey.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Key for a lock...?'}, + ['pinger'] = {['name'] = 'pinger', ['label'] = 'Pinger', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'pinger.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'With a pinger and your phone you can send out your location'}, + ['firstaid'] = {['name'] = 'firstaid', ['label'] = 'First Aid', ['weight'] = 2500, ['type'] = 'item', ['image'] = 'firstaid.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'You can use this First Aid kit to get people back on their feet'}, + ['printerdocument'] = {['name'] = 'printerdocument', ['label'] = 'Document', ['weight'] = 500, ['type'] = 'item', ['image'] = 'printerdocument.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A nice document'}, + ['weaponlicense'] = {['name'] = 'weaponlicense', ['label'] = 'Weapon License', ['weight'] = 0, ['type'] = 'item', ['image'] = 'weapon_license.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Weapon License'}, + ['oxy'] = {['name'] = 'oxy', ['label'] = 'Prescription Oxy', ['weight'] = 0, ['type'] = 'item', ['image'] = 'oxy.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'The Label Has Been Ripped Off'}, + ['visa'] = {['name'] = 'visa', ['label'] = 'Visa Card', ['weight'] = 0, ['type'] = 'item', ['image'] = 'visacard.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Visa can be used via ATM'}, + ['mastercard'] = {['name'] = 'mastercard', ['label'] = 'Master Card', ['weight'] = 0, ['type'] = 'item', ['image'] = 'mastercard.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'MasterCard can be used via ATM'}, + ['ephedrine'] = {['name'] = 'ephedrine', ['label'] = 'Ephedrine', ['weight'] = 200, ['type'] = 'item', ['image'] = 'chemical1.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Prescription medicine used to treat the symptoms of low blood pressure'}, + ['hydrochloricacid'] = {['name'] = 'hydrochloricacid', ['label'] = 'Hydrochloric Acid', ['weight'] = 200, ['type'] = 'item', ['image'] = 'chemical1.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Component of the gastric acid in the digestive systems of most animal species...including humans'}, + ['acetone'] = {['name'] = 'acetone', ['label'] = 'Acetone', ['weight'] = 200, ['type'] = 'item', ['image'] = 'chemical2.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Breathing moderate amounts for a short amount of time can irritate your nose, throat, lungs and eyes'}, + ['puremeth'] = {['name'] = 'puremeth', ['label'] = 'Pure Meth', ['weight'] = 100, ['type'] = 'item', ['image'] = 'meth10g.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A baggie of Pure Meth'}, + ['meth'] = {['name'] = 'meth', ['label'] = 'Meth', ['weight'] = 100, ['type'] = 'item', ['image'] = 'meth10g.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A baggie of Meth'}, + ['methtray'] = {['name'] = 'methtray', ['label'] = 'Meth Tray', ['weight'] = 200, ['type'] = 'item', ['image'] = 'methbrick.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'make some meth'}, + ['puremethtray'] = {['name'] = 'puremethtray', ['label'] = 'Pure Meth Tray', ['weight'] = 200, ['type'] = 'item', ['image'] = 'methbrick.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'make some meth'}, + ['grape'] = {['name'] = 'grape', ['label'] = 'Grape', ['weight'] = 100, ['type'] = 'item', ['image'] = 'grape.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Mmmmh yummie, grapes'}, + ['wine'] = {['name'] = 'wine', ['label'] = 'Wine', ['weight'] = 300, ['type'] = 'item', ['image'] = 'wine.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Some good wine to drink on a fine evening'}, + ['grapejuice'] = {['name'] = 'grapejuice', ['label'] = 'Grape Juice', ['weight'] = 200, ['type'] = 'item', ['image'] = 'grapejuice.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Grape juice is said to be healthy'}, + ['cocaleaf'] = {['name'] = 'cocaleaf', ['label'] = 'Cocaine Leaf', ['weight'] = 200, ['type'] = 'item', ['image'] = 'cocaineleaf.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = false, ['combinable'] = nil, ['description'] = 'Make that white girl'}, + ['fish'] = {['name'] = 'fish', ['label'] = 'Fish', ['weight'] = 1100, ['type'] = 'item', ['image'] = 'fish.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A normal fish Tatses pretty good!'}, + ['killerwhalemeat'] = {['name'] = 'killerwhalemeat', ['label'] = 'Killer Whale Meat', ['weight'] = 1100, ['type'] = 'item', ['image'] = 'killerwhalemeat.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Meat cut from a Killer Whale'}, + ['stingraymeat'] = {['name'] = 'stingraymeat', ['label'] = 'Stingray Meat', ['weight'] = 1111, ['type'] = 'item', ['image'] = 'stingraymeat.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Stingray Meat'}, + ['tigersharkmeat'] = {['name'] = 'tigersharkmeat', ['label'] = 'Tigershark Meat', ['weight'] = 1111, ['type'] = 'item', ['image'] = 'tigersharkmeat.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Meat cut from a Tigershark'}, + ['catfish'] = {['name'] = 'catfish', ['label'] = 'Catfish', ['weight'] = 1111, ['type'] = 'item', ['image'] = 'catfish.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A Catfish'}, + ['salmon'] = {['name'] = 'salmon', ['label'] = 'Salmon', ['weight'] = 1111, ['type'] = 'item', ['image'] = 'salmon.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A Salmon Fish'}, + ['largemouthbass'] = {['name'] = 'largemouthbass', ['label'] = 'Largemouth Bass', ['weight'] = 1111, ['type'] = 'item', ['image'] = 'largemouthbass.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'Fish for Fishing.'}, + ['goldfish'] = {['name'] = 'goldfish', ['label'] = 'Goldfish', ['weight'] = 1111, ['type'] = 'item', ['image'] = 'goldfish.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A Goldfish... I wonder how he got there...'}, + ['redfish'] = {['name'] = 'redfish', ['label'] = 'Redfish', ['weight'] = 1111, ['type'] = 'item', ['image'] = 'redfish.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'One fish two fish...'}, + ['bluefish'] = {['name'] = 'bluefish', ['label'] = 'Bluefish', ['weight'] = 1111, ['type'] = 'item', ['image'] = 'bluefish.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'One fish two fish redfish...'}, + ['stripedbass'] = {['name'] = 'stripedbass', ['label'] = 'Striped Bass', ['weight'] = 1111, ['type'] = 'item', ['image'] = 'stripedbass.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A Striped Bass'}, + ['fishingrod'] = {['name'] = 'fishingrod', ['label'] = 'Fishing Rod', ['weight'] = 5000, ['type'] = 'item', ['image'] = 'fishingrod.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A fishing rod for adventures with friends!!'}, + ['fishingbait'] = {['name'] = 'fishingbait', ['label'] = 'Fish Bait', ['weight'] = 400, ['type'] = 'item', ['image'] = 'fishbait.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A fish bait'}, } -- // HASH WEAPON ITEMS, NEED SOMETIMES TO GET INFO FOR CLIENT QBShared.Weapons = { -- // WEAPONS - [`weapon_unarmed`] = {["name"] = "weapon_unarmed", ["label"] = "Fists", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "placeholder.png", ["unique"] = true, ["useable"] = false, ["description"] = "Fisticuffs"}, - [`weapon_knife`] = {["name"] = "weapon_knife", ["label"] = "Knife", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_knife.png", ["unique"] = true, ["useable"] = false, ["description"] = "An instrument composed of a blade fixed into a handle, used for cutting or as a weapon"}, - [`weapon_nightstick`] = {["name"] = "weapon_nightstick", ["label"] = "Nightstick", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_nightstick.png", ["unique"] = true, ["useable"] = false, ["description"] = "A police officer's club or billy"}, - [`weapon_flashlight`] = {["name"] = "weapon_flashlight", ["label"] = "Flashlight", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_flashlight.png", ["unique"] = true, ["useable"] = false, ["description"] = "A small size sun that will make things brighter."}, - [`weapon_hammer`] = {["name"] = "weapon_hammer", ["label"] = "Hammer", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_hammer.png", ["unique"] = true, ["useable"] = false, ["description"] = "Used for jobs such as breaking things (legs) and driving in nails"}, - [`weapon_bat`] = {["name"] = "weapon_bat", ["label"] = "Bat", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_bat.png", ["unique"] = true, ["useable"] = false, ["description"] = "Used for hitting a ball in sports (or other things)"}, - [`weapon_golfclub`] = {["name"] = "weapon_golfclub", ["label"] = "Golfclub", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_golfclub.png", ["unique"] = true, ["useable"] = false, ["description"] = "A club used to hit the ball in golf"}, - [`weapon_crowbar`] = {["name"] = "weapon_crowbar", ["label"] = "Crowbar", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_crowbar.png", ["unique"] = true, ["useable"] = false, ["description"] = "An iron bar with a flattened end, used as a lever"}, - [`weapon_pistol`] = {["name"] = "weapon_pistol", ["label"] = "Walther P99", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_pistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A small firearm designed to be held in one hand"}, - [`weapon_pistol_mk2`] = {["name"] = "weapon_pistol_mk2", ["label"] = "Pistol Mk II", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_pistolmk2.png", ["unique"] = true, ["useable"] = false, ["description"] = "An upgraded small firearm designed to be held in one hand"}, - [`weapon_combatpistol`] = {["name"] = "weapon_combatpistol", ["label"] = "Combat Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_combatpistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A combat version small firearm designed to be held in one hand"}, - [`weapon_appistol`] = {["name"] = "weapon_appistol", ["label"] = "AP Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_appistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A small firearm designed to be held in one hand that is automatic"}, - [`weapon_pistol50`] = {["name"] = "weapon_pistol50", ["label"] = "Pistol .50 Cal", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_pistol50.png", ["unique"] = true, ["useable"] = false, ["description"] = "A .50 caliber firearm designed to be held with both hands"}, - [`weapon_microsmg`] = {["name"] = "weapon_microsmg", ["label"] = "Micro SMG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SMG", ["image"] = "weapon_microsmg.png", ["unique"] = true, ["useable"] = false, ["description"] = "A handheld lightweight machine gun"}, - [`weapon_smg`] = {["name"] = "weapon_smg", ["label"] = "SMG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SMG", ["image"] = "weapon_smg.png", ["unique"] = true, ["useable"] = false, ["description"] = "A handheld lightweight machine gun"}, - [`weapon_assaultsmg`] = {["name"] = "weapon_assaultsmg", ["label"] = "Assault SMG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SMG", ["image"] = "weapon_assaultsmg.png", ["unique"] = true, ["useable"] = false, ["description"] = "An assault version of a handheld lightweight machine gun"}, - [`weapon_assaultrifle`] = {["name"] = "weapon_assaultrifle", ["label"] = "Assault Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_assaultrifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A rapid-fire, magazine-fed automatic rifle designed for infantry use"}, - [`weapon_carbinerifle`] = {["name"] = "weapon_carbinerifle", ["label"] = "Carbine Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_carbinerifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A lightweight automatic rifle"}, - [`weapon_advancedrifle`] = {["name"] = "weapon_advancedrifle", ["label"] = "Advanced Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_advancedrifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "An assault version of a rapid-fire, magazine-fed automatic rifle designed for infantry use"}, - [`weapon_mg`] = {["name"] = "weapon_mg", ["label"] = "Machinegun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_MG", ["image"] = "weapon_mg.png", ["unique"] = true, ["useable"] = false, ["description"] = "An automatic gun that fires bullets in rapid succession for as long as the trigger is pressed"}, - [`weapon_combatmg`] = {["name"] = "weapon_combatmg", ["label"] = "Combat MG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_MG", ["image"] = "weapon_combatmg.png", ["unique"] = true, ["useable"] = false, ["description"] = "A combat version of an automatic gun that fires bullets in rapid succession for as long as the trigger is pressed"}, - [`weapon_pumpshotgun`] = {["name"] = "weapon_pumpshotgun", ["label"] = "Pump Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_pumpshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A pump-action smoothbore gun for firing small shot at short range"}, - [`weapon_sawnoffshotgun`] = {["name"] = "weapon_sawnoffshotgun", ["label"] = "Sawn-off Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_sawnoffshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A sawn-off smoothbore gun for firing small shot at short range"}, - [`weapon_assaultshotgun`] = {["name"] = "weapon_assaultshotgun", ["label"] = "Assault Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_assaultshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "An assault version of asmoothbore gun for firing small shot at short range"}, - [`weapon_bullpupshotgun`] = {["name"] = "weapon_bullpupshotgun", ["label"] = "Bullpup Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_bullpupshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A compact smoothbore gun for firing small shot at short range"}, - [`weapon_stungun`] = {["name"] = "weapon_stungun", ["label"] = "Taser", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_taser.png", ["unique"] = true, ["useable"] = false, ["description"] = "A weapon firing barbs attached by wires to batteries, causing temporary paralysis"}, - [`weapon_sniperrifle`] = {["name"] = "weapon_sniperrifle", ["label"] = "Sniper Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SNIPER", ["image"] = "weapon_sniperrifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A high-precision, long-range rifle"}, - [`weapon_heavysniper`] = {["name"] = "weapon_heavysniper", ["label"] = "Heavy Sniper", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SNIPER", ["image"] = "weapon_heavysniper.png", ["unique"] = true, ["useable"] = false, ["description"] = "An upgraded high-precision, long-range rifle"}, - [`weapon_remotesniper`] = {["name"] = "weapon_remotesniper", ["label"] = "Remote Sniper", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SNIPER_REMOTE", ["image"] = "weapon_remotesniper.png", ["unique"] = true, ["useable"] = false, ["description"] = "A portable high-precision, long-range rifle"}, - [`weapon_grenadelauncher`] = {["name"] = "weapon_grenadelauncher", ["label"] = "Grenade Launcher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_GRENADELAUNCHER", ["image"] = "weapon_grenadelauncher.png", ["unique"] = true, ["useable"] = false, ["description"] = "A weapon that fires a specially-designed large-caliber projectile, often with an explosive, smoke or gas warhead"}, - [`weapon_grenadelauncher_smoke`] = {["name"] = "weapon_grenadelauncher_smoke", ["label"] = "Smoke Grenade Launcher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_GRENADELAUNCHER", ["image"] = "weapon_smokegrenade.png", ["unique"] = true, ["useable"] = false, ["description"] = "A bomb that produces a lot of smoke when it explodes"}, - [`weapon_rpg`] = {["name"] = "weapon_rpg", ["label"] = "RPG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RPG", ["image"] = "weapon_rpg.png", ["unique"] = true, ["useable"] = false, ["description"] = "A rocket-propelled grenade launcher"}, - [`weapon_minigun`] = {["name"] = "weapon_minigun", ["label"] = "Minigun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_MINIGUN", ["image"] = "weapon_minigun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A portable machine gun consisting of a rotating cluster of six barrels and capable of variable rates of fire of up to 6,000 rounds per minute"}, - [`weapon_grenade`] = {["name"] = "weapon_grenade", ["label"] = "Grenade", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_grenade.png", ["unique"] = true, ["useable"] = false, ["description"] = "A handheld throwable bomb"}, - [`weapon_stickybomb`] = {["name"] = "weapon_stickybomb", ["label"] = "C4", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_stickybomb.png", ["unique"] = true, ["useable"] = false, ["description"] = "An explosive charge covered with an adhesive that when thrown against an object sticks until it explodes"}, - [`weapon_smokegrenade`] = {["name"] = "weapon_smokegrenade", ["label"] = "Smoke Grenade", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_c4.png", ["unique"] = true, ["useable"] = false, ["description"] = "An explosive charge that can be remotely detonated"}, - [`weapon_bzgas`] = {["name"] = "weapon_bzgas", ["label"] = "BZ Gas", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_bzgas.png", ["unique"] = true, ["useable"] = false, ["description"] = "A cannister of gas that causes extreme pain"}, - [`weapon_molotov`] = {["name"] = "weapon_molotov", ["label"] = "Molotov", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_molotov.png", ["unique"] = true, ["useable"] = false, ["description"] = "A crude bomb made of a bottle filled with a flammable liquid and fitted with a wick for lighting"}, - [`weapon_fireextinguisher`] = {["name"] = "weapon_fireextinguisher", ["label"] = "Fire Extinguisher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_fireextinguisher.png", ["unique"] = true, ["useable"] = false, ["description"] = "A portable device that discharges a jet of water, foam, gas, or other material to extinguish a fire"}, - [`weapon_petrolcan`] = {["name"] = "weapon_petrolcan", ["label"] = "Petrol Can", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PETROLCAN", ["image"] = "weapon_petrolcan.png", ["unique"] = true, ["useable"] = false, ["description"] = "A robust liquid container made from pressed steel"}, - [`weapon_briefcase`] = {["name"] = "weapon_briefcase", ["label"] = "Briefcase", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_briefcase.png", ["unique"] = true, ["useable"] = false, ["description"] = "A briefcase"}, - [`weapon_briefcase_02`] = {["name"] = "weapon_briefcase_02", ["label"] = "Briefcase", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_briefcase2.png", ["unique"] = true, ["useable"] = false, ["description"] = "A briefcase"}, - [`weapon_ball`] = {["name"] = "weapon_ball", ["label"] = "Ball", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_BALL", ["image"] = "weapon_ball.png", ["unique"] = true, ["useable"] = false, ["description"] = "A solid or hollow spherical or egg-shaped object that is kicked, thrown, or hit in a game"}, - [`weapon_flare`] = {["name"] = "weapon_flare", ["label"] = "Flare pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_FLARE", ["image"] = "weapon_flare.png", ["unique"] = true, ["useable"] = false, ["description"] = "A small pyrotechnic devices used for illumination and signalling"}, - [`weapon_snspistol`] = {["name"] = "weapon_snspistol", ["label"] = "SNS Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_snspistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A very small firearm designed to be easily concealed"}, - [`weapon_bottle`] = {["name"] = "weapon_bottle", ["label"] = "Broken Bottle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_bottle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A broken bottle"}, - [`weapon_gusenberg`] = {["name"] = "weapon_gusenberg", ["label"] = "Thompson SMG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_MG", ["image"] = "weapon_gusenberg.png", ["unique"] = true, ["useable"] = false, ["description"] = "An automatic rifle commonly referred to as a tommy gun"}, - [`weapon_specialcarbine`] = {["name"] = "weapon_specialcarbine", ["label"] = "Special Carbine", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_specialcarbine.png", ["unique"] = true, ["useable"] = false, ["description"] = "An extremely versatile assault rifle for any combat situation"}, - [`weapon_heavypistol`] = {["name"] = "weapon_heavypistol", ["label"] = "Heavy Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_heavypistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A hefty firearm designed to be held in one hand (or attempted)"}, - [`weapon_bullpuprifle`] = {["name"] = "weapon_bullpuprifle", ["label"] = "Bullpup Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_bullpuprifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A compact automatic assault rifle"}, - [`weapon_dagger`] = {["name"] = "weapon_dagger", ["label"] = "Dagger", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_dagger.png", ["unique"] = true, ["useable"] = false, ["description"] = "A short knife with a pointed and edged blade, used as a weapon"}, - [`weapon_vintagepistol`] = {["name"] = "weapon_vintagepistol", ["label"] = "Vintage Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_vintagepistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "An antique firearm designed to be held in one hand"}, - [`weapon_firework`] = {["name"] = "weapon_firework", ["label"] = "Firework Launcher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_firework.png", ["unique"] = true, ["useable"] = false, ["description"] = "A device containing gunpowder and other combustible chemicals that causes a spectacular explosion when ignited"}, - [`weapon_musket`] = {["name"] = "weapon_musket", ["label"] = "Musket", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_musket.png", ["unique"] = true, ["useable"] = false, ["description"] = "An infantryman's light gun with a long barrel, typically smooth-bored, muzzleloading, and fired from the shoulder"}, - [`weapon_heavyshotgun`] = {["name"] = "weapon_heavyshotgun", ["label"] = "Heavy Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_heavyshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A large smoothbore gun for firing small shot at short range"}, - [`weapon_marksmanrifle`] = {["name"] = "weapon_marksmanrifle", ["label"] = "Marksman Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SNIPER", ["image"] = "weapon_marksmanrifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A very accurate single-fire rifle"}, - [`weapon_hominglauncher`] = {["name"] = "weapon_hominglauncher", ["label"] = "Homing Launcher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_STINGER", ["image"] = "weapon_hominglauncher.png", ["unique"] = true, ["useable"] = false, ["description"] = "A weapon fitted with an electronic device that enables it to find and hit a target"}, - [`weapon_proxmine`] = {["name"] = "weapon_proxmine", ["label"] = "Proxmine Grenade", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_proximitymine.png", ["unique"] = true, ["useable"] = false, ["description"] = "A bomb placed on the ground that detonates when going within its proximity"}, - [`weapon_snowball`] = {["name"] = "weapon_snowball", ["label"] = "Snowball", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_snowball.png", ["unique"] = true, ["useable"] = false, ["description"] = "A ball of packed snow, especially one made for throwing at other people for fun"}, - [`weapon_flaregun`] = {["name"] = "weapon_flaregun", ["label"] = "Flare Gun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_FLARE", ["image"] = "weapon_flaregun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A handgun for firing signal rockets"}, - [`weapon_garbagebag`] = {["name"] = "weapon_garbagebag", ["label"] = "Garbage Bag", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_garbagebag.png", ["unique"] = true, ["useable"] = false, ["description"] = "A garbage bag"}, - [`weapon_handcuffs`] = {["name"] = "weapon_handcuffs", ["label"] = "Handcuffs", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_handcuffs.png", ["unique"] = true, ["useable"] = false, ["description"] = "A pair of lockable linked metal rings for securing a prisoner's wrists"}, - [`weapon_combatpdw`] = {["name"] = "weapon_combatpdw", ["label"] = "Combat PDW", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SMG", ["image"] = "weapon_combatpdw.png", ["unique"] = true, ["useable"] = false, ["description"] = "A combat version of a handheld lightweight machine gun"}, - [`weapon_marksmanpistol`] = {["name"] = "weapon_marksmanpistol", ["label"] = "Marksman Pistol", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_marksmanpistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A very accurate small firearm designed to be held in one hand"}, - [`weapon_knuckle`] = {["name"] = "weapon_knuckle", ["label"] = "Knuckle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_knuckle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A metal guard worn over the knuckles in fighting, especially to increase the effect of the blows"}, - [`weapon_hatchet`] = {["name"] = "weapon_hatchet", ["label"] = "Hatchet", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_hatchet.png", ["unique"] = true, ["useable"] = false, ["description"] = "A small axe with a short handle for use in one hand"}, - [`weapon_railgun`] = {["name"] = "weapon_railgun", ["label"] = "Railgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_railgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A weapon that uses electromagnetic force to launch high velocity projectiles"}, - [`weapon_machete`] = {["name"] = "weapon_machete", ["label"] = "Machete", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_machete.png", ["unique"] = true, ["useable"] = false, ["description"] = "A broad, heavy knife used as a weapon"}, - [`weapon_machinepistol`] = {["name"] = "weapon_machinepistol", ["label"] = "Tec-9", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_machinepistol.png", ["unique"] = true, ["useable"] = false, ["description"] = "A self-loading pistol capable of burst or fully automatic fire"}, - [`weapon_switchblade`] = {["name"] = "weapon_switchblade", ["label"] = "Switchblade", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_switchblade.png", ["unique"] = true, ["useable"] = false, ["description"] = "A knife with a blade that springs out from the handle when a button is pressed"}, - [`weapon_revolver`] = {["name"] = "weapon_revolver", ["label"] = "Revolver", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_PISTOL", ["image"] = "weapon_revolver.png", ["unique"] = true, ["useable"] = false, ["description"] = "A pistol with revolving chambers enabling several shots to be fired without reloading"}, - [`weapon_dbshotgun`] = {["name"] = "weapon_dbshotgun", ["label"] = "Double-barrel Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_dbshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A shotgun with two parallel barrels, allowing two single shots to be fired in quick succession"}, - [`weapon_compactrifle`] = {["name"] = "weapon_compactrifle", ["label"] = "Compact Rifle", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_RIFLE", ["image"] = "weapon_compactrifle.png", ["unique"] = true, ["useable"] = false, ["description"] = "A compact version of an assault rifle"}, - [`weapon_autoshotgun`] = {["name"] = "weapon_autoshotgun", ["label"] = "Auto Shotgun", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SHOTGUN", ["image"] = "weapon_autoshotgun.png", ["unique"] = true, ["useable"] = false, ["description"] = "A shotgun capable of rapid continous fire"}, - [`weapon_battleaxe`] = {["name"] = "weapon_battleaxe", ["label"] = "Battle Axe", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_battleaxe.png", ["unique"] = true, ["useable"] = false, ["description"] = "A large broad-bladed axe used in ancient warfare"}, - [`weapon_compactlauncher`] = {["name"] = "weapon_compactlauncher", ["label"] = "Compact Launcher", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_compactlauncher.png", ["unique"] = true, ["useable"] = false, ["description"] = "A compact grenade launcher"}, - [`weapon_minismg`] = {["name"] = "weapon_minismg", ["label"] = "Mini SMG", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = "AMMO_SMG", ["image"] = "weapon_minismg.png", ["unique"] = true, ["useable"] = false, ["description"] = "A mini handheld lightweight machine gun"}, - [`weapon_pipebomb`] = {["name"] = "weapon_pipebomb", ["label"] = "Pipe Bomb", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_pipebomb.png", ["unique"] = true, ["useable"] = false, ["description"] = "A homemade bomb, the components of which are contained in a pipe"}, - [`weapon_poolcue`] = {["name"] = "weapon_poolcue", ["label"] = "Poolcue", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_poolcue.png", ["unique"] = true, ["useable"] = false, ["description"] = "A stick used to strike a ball, usually the cue ball (sometimes)"}, - [`weapon_wrench`] = {["name"] = "weapon_wrench", ["label"] = "Wrench", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "weapon_wrench.png", ["unique"] = true, ["useable"] = false, ["description"] = "A tool used for gripping and turning nuts, bolts, pipes, etc"}, - [`weapon_bread`] = {["name"] = "weapon_bread", ["label"] = "Baquette", ["weight"] = 1000, ["type"] = "weapon", ["ammotype"] = nil, ["image"] = "baquette.png", ["unique"] = true, ["useable"] = false, ["description"] = "Bread..?"}, + [`weapon_unarmed`] = {['name'] = 'weapon_unarmed', ['label'] = 'Fists', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'placeholder.png', ['unique'] = true, ['useable'] = false, ['description'] = 'Fisticuffs'}, + [`weapon_knife`] = {['name'] = 'weapon_knife', ['label'] = 'Knife', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_knife.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An instrument composed of a blade fixed into a handle, used for cutting or as a weapon'}, + [`weapon_nightstick`] = {['name'] = 'weapon_nightstick', ['label'] = 'Nightstick', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_nightstick.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A police officer\'s club or billy'}, + [`weapon_flashlight`] = {['name'] = 'weapon_flashlight', ['label'] = 'Flashlight', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_flashlight.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A small size sun that will make things brighter.'}, + [`weapon_hammer`] = {['name'] = 'weapon_hammer', ['label'] = 'Hammer', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_hammer.png', ['unique'] = true, ['useable'] = false, ['description'] = 'Used for jobs such as breaking things (legs) and driving in nails'}, + [`weapon_bat`] = {['name'] = 'weapon_bat', ['label'] = 'Bat', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_bat.png', ['unique'] = true, ['useable'] = false, ['description'] = 'Used for hitting a ball in sports (or other things)'}, + [`weapon_golfclub`] = {['name'] = 'weapon_golfclub', ['label'] = 'Golfclub', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_golfclub.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A club used to hit the ball in golf'}, + [`weapon_crowbar`] = {['name'] = 'weapon_crowbar', ['label'] = 'Crowbar', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_crowbar.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An iron bar with a flattened end, used as a lever'}, + [`weapon_pistol`] = {['name'] = 'weapon_pistol', ['label'] = 'Walther P99', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_pistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A small firearm designed to be held in one hand'}, + [`weapon_pistol_mk2`] = {['name'] = 'weapon_pistol_mk2', ['label'] = 'Pistol Mk II', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_pistolmk2.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An upgraded small firearm designed to be held in one hand'}, + [`weapon_combatpistol`] = {['name'] = 'weapon_combatpistol', ['label'] = 'Combat Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_combatpistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A combat version small firearm designed to be held in one hand'}, + [`weapon_appistol`] = {['name'] = 'weapon_appistol', ['label'] = 'AP Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_appistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A small firearm designed to be held in one hand that is automatic'}, + [`weapon_pistol50`] = {['name'] = 'weapon_pistol50', ['label'] = 'Pistol .50 Cal', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_pistol50.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A .50 caliber firearm designed to be held with both hands'}, + [`weapon_microsmg`] = {['name'] = 'weapon_microsmg', ['label'] = 'Micro SMG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SMG', ['image'] = 'weapon_microsmg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A handheld lightweight machine gun'}, + [`weapon_smg`] = {['name'] = 'weapon_smg', ['label'] = 'SMG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SMG', ['image'] = 'weapon_smg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A handheld lightweight machine gun'}, + [`weapon_assaultsmg`] = {['name'] = 'weapon_assaultsmg', ['label'] = 'Assault SMG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SMG', ['image'] = 'weapon_assaultsmg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An assault version of a handheld lightweight machine gun'}, + [`weapon_assaultrifle`] = {['name'] = 'weapon_assaultrifle', ['label'] = 'Assault Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_assaultrifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A rapid-fire, magazine-fed automatic rifle designed for infantry use'}, + [`weapon_carbinerifle`] = {['name'] = 'weapon_carbinerifle', ['label'] = 'Carbine Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_carbinerifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A lightweight automatic rifle'}, + [`weapon_advancedrifle`] = {['name'] = 'weapon_advancedrifle', ['label'] = 'Advanced Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_advancedrifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An assault version of a rapid-fire, magazine-fed automatic rifle designed for infantry use'}, + [`weapon_mg`] = {['name'] = 'weapon_mg', ['label'] = 'Machinegun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_MG', ['image'] = 'weapon_mg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An automatic gun that fires bullets in rapid succession for as long as the trigger is pressed'}, + [`weapon_combatmg`] = {['name'] = 'weapon_combatmg', ['label'] = 'Combat MG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_MG', ['image'] = 'weapon_combatmg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A combat version of an automatic gun that fires bullets in rapid succession for as long as the trigger is pressed'}, + [`weapon_pumpshotgun`] = {['name'] = 'weapon_pumpshotgun', ['label'] = 'Pump Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_pumpshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A pump-action smoothbore gun for firing small shot at short range'}, + [`weapon_sawnoffshotgun`] = {['name'] = 'weapon_sawnoffshotgun', ['label'] = 'Sawn-off Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_sawnoffshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A sawn-off smoothbore gun for firing small shot at short range'}, + [`weapon_assaultshotgun`] = {['name'] = 'weapon_assaultshotgun', ['label'] = 'Assault Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_assaultshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An assault version of asmoothbore gun for firing small shot at short range'}, + [`weapon_bullpupshotgun`] = {['name'] = 'weapon_bullpupshotgun', ['label'] = 'Bullpup Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_bullpupshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A compact smoothbore gun for firing small shot at short range'}, + [`weapon_stungun`] = {['name'] = 'weapon_stungun', ['label'] = 'Taser', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_taser.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A weapon firing barbs attached by wires to batteries, causing temporary paralysis'}, + [`weapon_sniperrifle`] = {['name'] = 'weapon_sniperrifle', ['label'] = 'Sniper Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SNIPER', ['image'] = 'weapon_sniperrifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A high-precision, long-range rifle'}, + [`weapon_heavysniper`] = {['name'] = 'weapon_heavysniper', ['label'] = 'Heavy Sniper', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SNIPER', ['image'] = 'weapon_heavysniper.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An upgraded high-precision, long-range rifle'}, + [`weapon_remotesniper`] = {['name'] = 'weapon_remotesniper', ['label'] = 'Remote Sniper', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SNIPER_REMOTE', ['image'] = 'weapon_remotesniper.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A portable high-precision, long-range rifle'}, + [`weapon_grenadelauncher`] = {['name'] = 'weapon_grenadelauncher', ['label'] = 'Grenade Launcher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_GRENADELAUNCHER', ['image'] = 'weapon_grenadelauncher.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A weapon that fires a specially-designed large-caliber projectile, often with an explosive, smoke or gas warhead'}, + [`weapon_grenadelauncher_smoke`] = {['name'] = 'weapon_grenadelauncher_smoke', ['label'] = 'Smoke Grenade Launcher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_GRENADELAUNCHER', ['image'] = 'weapon_smokegrenade.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A bomb that produces a lot of smoke when it explodes'}, + [`weapon_rpg`] = {['name'] = 'weapon_rpg', ['label'] = 'RPG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RPG', ['image'] = 'weapon_rpg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A rocket-propelled grenade launcher'}, + [`weapon_minigun`] = {['name'] = 'weapon_minigun', ['label'] = 'Minigun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_MINIGUN', ['image'] = 'weapon_minigun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A portable machine gun consisting of a rotating cluster of six barrels and capable of variable rates of fire of up to 6,000 rounds per minute'}, + [`weapon_grenade`] = {['name'] = 'weapon_grenade', ['label'] = 'Grenade', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_grenade.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A handheld throwable bomb'}, + [`weapon_stickybomb`] = {['name'] = 'weapon_stickybomb', ['label'] = 'C4', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_stickybomb.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An explosive charge covered with an adhesive that when thrown against an object sticks until it explodes'}, + [`weapon_smokegrenade`] = {['name'] = 'weapon_smokegrenade', ['label'] = 'Smoke Grenade', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_c4.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An explosive charge that can be remotely detonated'}, + [`weapon_bzgas`] = {['name'] = 'weapon_bzgas', ['label'] = 'BZ Gas', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_bzgas.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A cannister of gas that causes extreme pain'}, + [`weapon_molotov`] = {['name'] = 'weapon_molotov', ['label'] = 'Molotov', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_molotov.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A crude bomb made of a bottle filled with a flammable liquid and fitted with a wick for lighting'}, + [`weapon_fireextinguisher`] = {['name'] = 'weapon_fireextinguisher', ['label'] = 'Fire Extinguisher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_fireextinguisher.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A portable device that discharges a jet of water, foam, gas, or other material to extinguish a fire'}, + [`weapon_petrolcan`] = {['name'] = 'weapon_petrolcan', ['label'] = 'Petrol Can', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PETROLCAN', ['image'] = 'weapon_petrolcan.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A robust liquid container made from pressed steel'}, + [`weapon_briefcase`] = {['name'] = 'weapon_briefcase', ['label'] = 'Briefcase', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_briefcase.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A briefcase'}, + [`weapon_briefcase_02`] = {['name'] = 'weapon_briefcase_02', ['label'] = 'Briefcase', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_briefcase2.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A briefcase'}, + [`weapon_ball`] = {['name'] = 'weapon_ball', ['label'] = 'Ball', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_BALL', ['image'] = 'weapon_ball.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A solid or hollow spherical or egg-shaped object that is kicked, thrown, or hit in a game'}, + [`weapon_flare`] = {['name'] = 'weapon_flare', ['label'] = 'Flare pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_FLARE', ['image'] = 'weapon_flare.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A small pyrotechnic devices used for illumination and signalling'}, + [`weapon_snspistol`] = {['name'] = 'weapon_snspistol', ['label'] = 'SNS Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_snspistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A very small firearm designed to be easily concealed'}, + [`weapon_bottle`] = {['name'] = 'weapon_bottle', ['label'] = 'Broken Bottle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_bottle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A broken bottle'}, + [`weapon_gusenberg`] = {['name'] = 'weapon_gusenberg', ['label'] = 'Thompson SMG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_MG', ['image'] = 'weapon_gusenberg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An automatic rifle commonly referred to as a tommy gun'}, + [`weapon_specialcarbine`] = {['name'] = 'weapon_specialcarbine', ['label'] = 'Special Carbine', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_specialcarbine.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An extremely versatile assault rifle for any combat situation'}, + [`weapon_heavypistol`] = {['name'] = 'weapon_heavypistol', ['label'] = 'Heavy Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_heavypistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A hefty firearm designed to be held in one hand (or attempted)'}, + [`weapon_bullpuprifle`] = {['name'] = 'weapon_bullpuprifle', ['label'] = 'Bullpup Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_bullpuprifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A compact automatic assault rifle'}, + [`weapon_dagger`] = {['name'] = 'weapon_dagger', ['label'] = 'Dagger', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_dagger.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A short knife with a pointed and edged blade, used as a weapon'}, + [`weapon_vintagepistol`] = {['name'] = 'weapon_vintagepistol', ['label'] = 'Vintage Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_vintagepistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An antique firearm designed to be held in one hand'}, + [`weapon_firework`] = {['name'] = 'weapon_firework', ['label'] = 'Firework Launcher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_firework.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A device containing gunpowder and other combustible chemicals that causes a spectacular explosion when ignited'}, + [`weapon_musket`] = {['name'] = 'weapon_musket', ['label'] = 'Musket', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_musket.png', ['unique'] = true, ['useable'] = false, ['description'] = 'An infantryman\'s light gun with a long barrel, typically smooth-bored, muzzleloading, and fired from the shoulder'}, + [`weapon_heavyshotgun`] = {['name'] = 'weapon_heavyshotgun', ['label'] = 'Heavy Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_heavyshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A large smoothbore gun for firing small shot at short range'}, + [`weapon_marksmanrifle`] = {['name'] = 'weapon_marksmanrifle', ['label'] = 'Marksman Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SNIPER', ['image'] = 'weapon_marksmanrifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A very accurate single-fire rifle'}, + [`weapon_hominglauncher`] = {['name'] = 'weapon_hominglauncher', ['label'] = 'Homing Launcher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_STINGER', ['image'] = 'weapon_hominglauncher.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A weapon fitted with an electronic device that enables it to find and hit a target'}, + [`weapon_proxmine`] = {['name'] = 'weapon_proxmine', ['label'] = 'Proxmine Grenade', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_proximitymine.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A bomb placed on the ground that detonates when going within its proximity'}, + [`weapon_snowball`] = {['name'] = 'weapon_snowball', ['label'] = 'Snowball', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_snowball.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A ball of packed snow, especially one made for throwing at other people for fun'}, + [`weapon_flaregun`] = {['name'] = 'weapon_flaregun', ['label'] = 'Flare Gun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_FLARE', ['image'] = 'weapon_flaregun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A handgun for firing signal rockets'}, + [`weapon_garbagebag`] = {['name'] = 'weapon_garbagebag', ['label'] = 'Garbage Bag', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_garbagebag.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A garbage bag'}, + [`weapon_handcuffs`] = {['name'] = 'weapon_handcuffs', ['label'] = 'Handcuffs', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_handcuffs.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A pair of lockable linked metal rings for securing a prisoner\'s wrists'}, + [`weapon_combatpdw`] = {['name'] = 'weapon_combatpdw', ['label'] = 'Combat PDW', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SMG', ['image'] = 'weapon_combatpdw.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A combat version of a handheld lightweight machine gun'}, + [`weapon_marksmanpistol`] = {['name'] = 'weapon_marksmanpistol', ['label'] = 'Marksman Pistol', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_marksmanpistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A very accurate small firearm designed to be held in one hand'}, + [`weapon_knuckle`] = {['name'] = 'weapon_knuckle', ['label'] = 'Knuckle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_knuckle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A metal guard worn over the knuckles in fighting, especially to increase the effect of the blows'}, + [`weapon_hatchet`] = {['name'] = 'weapon_hatchet', ['label'] = 'Hatchet', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_hatchet.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A small axe with a short handle for use in one hand'}, + [`weapon_railgun`] = {['name'] = 'weapon_railgun', ['label'] = 'Railgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_railgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A weapon that uses electromagnetic force to launch high velocity projectiles'}, + [`weapon_machete`] = {['name'] = 'weapon_machete', ['label'] = 'Machete', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_machete.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A broad, heavy knife used as a weapon'}, + [`weapon_machinepistol`] = {['name'] = 'weapon_machinepistol', ['label'] = 'Tec-9', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_machinepistol.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A self-loading pistol capable of burst or fully automatic fire'}, + [`weapon_switchblade`] = {['name'] = 'weapon_switchblade', ['label'] = 'Switchblade', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_switchblade.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A knife with a blade that springs out from the handle when a button is pressed'}, + [`weapon_revolver`] = {['name'] = 'weapon_revolver', ['label'] = 'Revolver', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_PISTOL', ['image'] = 'weapon_revolver.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A pistol with revolving chambers enabling several shots to be fired without reloading'}, + [`weapon_dbshotgun`] = {['name'] = 'weapon_dbshotgun', ['label'] = 'Double-barrel Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_dbshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A shotgun with two parallel barrels, allowing two single shots to be fired in quick succession'}, + [`weapon_compactrifle`] = {['name'] = 'weapon_compactrifle', ['label'] = 'Compact Rifle', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_RIFLE', ['image'] = 'weapon_compactrifle.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A compact version of an assault rifle'}, + [`weapon_autoshotgun`] = {['name'] = 'weapon_autoshotgun', ['label'] = 'Auto Shotgun', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SHOTGUN', ['image'] = 'weapon_autoshotgun.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A shotgun capable of rapid continous fire'}, + [`weapon_battleaxe`] = {['name'] = 'weapon_battleaxe', ['label'] = 'Battle Axe', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_battleaxe.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A large broad-bladed axe used in ancient warfare'}, + [`weapon_compactlauncher`] = {['name'] = 'weapon_compactlauncher', ['label'] = 'Compact Launcher', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_compactlauncher.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A compact grenade launcher'}, + [`weapon_minismg`] = {['name'] = 'weapon_minismg', ['label'] = 'Mini SMG', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = 'AMMO_SMG', ['image'] = 'weapon_minismg.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A mini handheld lightweight machine gun'}, + [`weapon_pipebomb`] = {['name'] = 'weapon_pipebomb', ['label'] = 'Pipe Bomb', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_pipebomb.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A homemade bomb, the components of which are contained in a pipe'}, + [`weapon_poolcue`] = {['name'] = 'weapon_poolcue', ['label'] = 'Poolcue', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_poolcue.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A stick used to strike a ball, usually the cue ball (sometimes)'}, + [`weapon_wrench`] = {['name'] = 'weapon_wrench', ['label'] = 'Wrench', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'weapon_wrench.png', ['unique'] = true, ['useable'] = false, ['description'] = 'A tool used for gripping and turning nuts, bolts, pipes, etc'}, + [`weapon_bread`] = {['name'] = 'weapon_bread', ['label'] = 'Baquette', ['weight'] = 1000, ['type'] = 'weapon', ['ammotype'] = nil, ['image'] = 'baquette.png', ['unique'] = true, ['useable'] = false, ['description'] = 'Bread..?'}, } -- Gangs QBShared.Gangs = { - ["none"] = { - label = "No Gang", + ['none'] = { + label = 'No Gang', grades = { ['0'] = { - name = "Unaffiliated" + name = 'Unaffiliated' }, }, }, - ["lostmc"] = { - label = "The Lost MC", + ['lostmc'] = { + label = 'The Lost MC', grades = { ['0'] = { - name = "Recruit" + name = 'Recruit' }, ['1'] = { - name = "Enforcer" + name = 'Enforcer' }, ['2'] = { - name = "Shot Caller" + name = 'Shot Caller' }, ['3'] = { - name = "Boss", + name = 'Boss', isboss = true }, }, }, - ["ballas"] = { - label = "Ballas", + ['ballas'] = { + label = 'Ballas', grades = { ['0'] = { - name = "Recruit" + name = 'Recruit' }, ['1'] = { - name = "Enforcer" + name = 'Enforcer' }, ['2'] = { - name = "Shot Caller" + name = 'Shot Caller' }, ['3'] = { - name = "Boss", + name = 'Boss', isboss = true }, }, }, - ["vagos"] = { - label = "Vagos", + ['vagos'] = { + label = 'Vagos', grades = { ['0'] = { - name = "Recruit" + name = 'Recruit' }, ['1'] = { - name = "Enforcer" + name = 'Enforcer' }, ['2'] = { - name = "Shot Caller" + name = 'Shot Caller' }, ['3'] = { - name = "Boss", + name = 'Boss', isboss = true }, }, }, - ["cartel"] = { - label = "Cartel", + ['cartel'] = { + label = 'Cartel', grades = { ['0'] = { - name = "Recruit" + name = 'Recruit' }, ['1'] = { - name = "Enforcer" + name = 'Enforcer' }, ['2'] = { - name = "Shot Caller" + name = 'Shot Caller' }, ['3'] = { - name = "Boss", + name = 'Boss', isboss = true }, }, }, - ["families"] = { - label = "Families", + ['families'] = { + label = 'Families', grades = { ['0'] = { - name = "Recruit" + name = 'Recruit' }, ['1'] = { - name = "Enforcer" + name = 'Enforcer' }, ['2'] = { - name = "Shot Caller" + name = 'Shot Caller' }, ['3'] = { - name = "Boss", + name = 'Boss', isboss = true }, }, }, - ["triads"] = { - label = "Triads", + ['triads'] = { + label = 'Triads', grades = { ['0'] = { - name = "Recruit" + name = 'Recruit' }, ['1'] = { - name = "Enforcer" + name = 'Enforcer' }, ['2'] = { - name = "Shot Caller" + name = 'Shot Caller' }, ['3'] = { - name = "Boss", + name = 'Boss', isboss = true }, }, @@ -592,254 +592,254 @@ QBShared.Gangs = { -- Jobs QBShared.Jobs = { - ["unemployed"] = { - label = "Civilian", + ['unemployed'] = { + label = 'Civilian', defaultDuty = true, grades = { ['0'] = { - name = "Freelancer", + name = 'Freelancer', payment = 10 }, }, }, - ["police"] = { - label = "Law Enforcement", + ['police'] = { + label = 'Law Enforcement', defaultDuty = true, grades = { ['0'] = { - name = "Recruit", + name = 'Recruit', payment = 50 }, ['1'] = { - name = "Officer", + name = 'Officer', payment = 75 }, ['2'] = { - name = "Sergeant", + name = 'Sergeant', payment = 100 }, ['3'] = { - name = "Lieutenant", + name = 'Lieutenant', payment = 125 }, ['4'] = { - name = "Chief", + name = 'Chief', isboss = true, payment = 150 }, }, }, - ["ambulance"] = { - label = "EMS", + ['ambulance'] = { + label = 'EMS', defaultDuty = true, grades = { ['0'] = { - name = "Recruit", + name = 'Recruit', payment = 50 }, ['1'] = { - name = "Paramedic", + name = 'Paramedic', payment = 75 }, ['2'] = { - name = "Doctor", + name = 'Doctor', payment = 100 }, ['3'] = { - name = "Surgeon", + name = 'Surgeon', payment = 125 }, ['4'] = { - name = "Chief", + name = 'Chief', isboss = true, payment = 150 }, }, }, - ["realestate"] = { - label = "Real Estate", + ['realestate'] = { + label = 'Real Estate', defaultDuty = true, grades = { ['0'] = { - name = "Recruit", + name = 'Recruit', payment = 50 }, ['1'] = { - name = "House Sales", + name = 'House Sales', payment = 75 }, ['2'] = { - name = "Business Sales", + name = 'Business Sales', payment = 100 }, ['3'] = { - name = "Broker", + name = 'Broker', payment = 125 }, ['4'] = { - name = "Manager", + name = 'Manager', isboss = true, payment = 150 }, }, }, - ["taxi"] = { - label = "Taxi", + ['taxi'] = { + label = 'Taxi', defaultDuty = true, grades = { ['0'] = { - name = "Recruit", + name = 'Recruit', payment = 50 }, ['1'] = { - name = "Driver", + name = 'Driver', payment = 75 }, ['2'] = { - name = "Event Driver", + name = 'Event Driver', payment = 100 }, ['3'] = { - name = "Sales", + name = 'Sales', payment = 125 }, ['4'] = { - name = "Manager", + name = 'Manager', isboss = true, payment = 150 }, }, }, - ["cardealer"] = { - label = "Vehicle Dealer", + ['cardealer'] = { + label = 'Vehicle Dealer', defaultDuty = true, grades = { ['0'] = { - name = "Recruit", + name = 'Recruit', payment = 50 }, ['1'] = { - name = "Showroom Sales", + name = 'Showroom Sales', payment = 75 }, ['2'] = { - name = "Business Sales", + name = 'Business Sales', payment = 100 }, ['3'] = { - name = "Finance", + name = 'Finance', payment = 125 }, ['4'] = { - name = "Manager", + name = 'Manager', isboss = true, payment = 150 }, }, }, - ["mechanic"] = { - label = "Mechanic", + ['mechanic'] = { + label = 'Mechanic', defaultDuty = true, grades = { ['0'] = { - name = "Recruit", + name = 'Recruit', payment = 50 }, ['1'] = { - name = "Novice", + name = 'Novice', payment = 75 }, ['2'] = { - name = "Experienced", + name = 'Experienced', payment = 100 }, ['3'] = { - name = "Advanced", + name = 'Advanced', payment = 125 }, ['4'] = { - name = "Manager", + name = 'Manager', isboss = true, payment = 150 }, }, }, - ["judge"] = { - label = "Honorary", + ['judge'] = { + label = 'Honorary', defaultDuty = true, grades = { ['0'] = { - name = "Judge", + name = 'Judge', payment = 100 }, }, }, - ["lawyer"] = { - label = "Law Firm", + ['lawyer'] = { + label = 'Law Firm', defaultDuty = true, grades = { ['0'] = { - name = "Associate", + name = 'Associate', payment = 50 }, }, }, - ["reporter"] = { - label = "Reporter", + ['reporter'] = { + label = 'Reporter', defaultDuty = true, grades = { ['0'] = { - name = "Journalist", + name = 'Journalist', payment = 50 }, }, }, - ["trucker"] = { - label = "Trucker", + ['trucker'] = { + label = 'Trucker', defaultDuty = true, grades = { ['0'] = { - name = "Driver", + name = 'Driver', payment = 50 }, }, }, - ["tow"] = { - label = "Towing", + ['tow'] = { + label = 'Towing', defaultDuty = true, grades = { ['0'] = { - name = "Driver", + name = 'Driver', payment = 50 }, }, }, - ["garbage"] = { - label = "Garbage", + ['garbage'] = { + label = 'Garbage', defaultDuty = true, grades = { ['0'] = { - name = "Collector", + name = 'Collector', payment = 50 }, }, }, - ["vineyard"] = { - label = "Vineyard", + ['vineyard'] = { + label = 'Vineyard', defaultDuty = true, grades = { ['0'] = { - name = "Picker", + name = 'Picker', payment = 50 }, }, }, - ["hotdog"] = { - label = "Hotdog", + ['hotdog'] = { + label = 'Hotdog', defaultDuty = true, grades = { ['0'] = { - name = "Sales", + name = 'Sales', payment = 50 }, }, @@ -848,1867 +848,1867 @@ QBShared.Jobs = { -- Vehicles QBShared.Vehicles = { - ["adder"] = { - ["name"] = "Adder", - ["brand"] = "Truffade", - ["model"] = "adder", - ["price"] = 280000, - ["category"] = "super", - ["hash"] = `adder`, - ["shop"] = "pdm", - }, - ["alpha"] = { - ["name"] = "Alpha", - ["brand"] = "Albany", - ["model"] = "alpha", - ["price"] = 53000, - ["category"] = "sports", - ["hash"] = `alpha`, - ["shop"] = "pdm", - }, - ["ardent"] = { - ["name"] = "Ardent", - ["brand"] = "Ocelot", - ["model"] = "ardent", - ["price"] = 30000, - ["category"] = "sportsclassics", - ["hash"] = `ardent`, - ["shop"] = "pdm", - }, - ["asea"] = { - ["name"] = "Asea", - ["brand"] = "Declasse", - ["model"] = "asea", - ["price"] = 2500, - ["category"] = "sedans", - ["hash"] = `asea`, - ["shop"] = "pdm", - }, - ["autarch"] = { - ["name"] = "Autarch", - ["brand"] = "Överflöd", - ["model"] = "autarch", - ["price"] = 224000, - ["category"] = "super", - ["hash"] = `autarch`, - ["shop"] = "pdm", - }, - ["avarus"] = { - ["name"] = "Avarus", - ["brand"] = "LCC", - ["model"] = "avarus", - ["price"] = 20000, - ["category"] = "motorcycles", - ["hash"] = `avarus`, - ["shop"] = "pdm", - }, - ["bagger"] = { - ["name"] = "Bagger", - ["brand"] = "WMC", - ["model"] = "bagger", - ["price"] = 13500, - ["category"] = "motorcycles", - ["hash"] = `bagger`, - ["shop"] = "pdm", - }, - ["baller2"] = { - ["name"] = "Baller", - ["brand"] = "Gallivanter", - ["model"] = "baller2", - ["price"] = 15000, - ["category"] = "suvs", - ["hash"] = `baller2`, - ["shop"] = "pdm", - }, - ["baller3"] = { - ["name"] = "Baller LE", - ["brand"] = "Gallivanter", - ["model"] = "baller3", - ["price"] = 15000, - ["category"] = "suvs", - ["hash"] = `baller3`, - ["shop"] = "pdm", - }, - ["banshee"] = { - ["name"] = "Banshee", - ["brand"] = "Bravado", - ["model"] = "banshee", - ["price"] = 56000, - ["category"] = "sports", - ["hash"] = `banshee`, - ["shop"] = "pdm", - }, - ["banshee2"] = { - ["name"] = "Banshee 900R", - ["brand"] = "Bravado", - ["model"] = "banshee2", - ["price"] = 120000, - ["category"] = "super", - ["hash"] = `banshee2`, - ["shop"] = "pdm", - }, - ["bati"] = { - ["name"] = "Bati 801", - ["brand"] = "Pegassi", - ["model"] = "bati", - ["price"] = 24000, - ["category"] = "motorcycles", - ["hash"] = `bati`, - ["shop"] = "pdm", - }, - ["bestiagts"] = { - ["name"] = "Bestia GTS", - ["brand"] = "Grotti", - ["model"] = "bestiagts", - ["price"] = 37000, - ["category"] = "sports", - ["hash"] = `bestiagts`, - ["shop"] = "pdm", - }, - ["bfinjection"] = { - ["name"] = "Bf Injection", - ["brand"] = "Annis", - ["price"] = 9000, - ["category"] = "offroad", - ["model"] = "bfinjection", - ["hash"] = `bfinjection`, - ["shop"] = "pdm", - }, - ["bifta"] = { - ["name"] = "Bifta", - ["brand"] = "Annis", - ["price"] = 15500, - ["category"] = "offroad", - ["model"] = "bifta", - ["hash"] = `bifta`, - ["shop"] = "pdm", - }, - ["bison"] = { - ["name"] = "Bison", - ["brand"] = "Bravado", - ["model"] = "bison", - ["price"] = 18000, - ["category"] = "vans", - ["hash"] = `bison`, - ["shop"] = "pdm", - }, - ["bjxl"] = { - ["name"] = "BeeJay XL", - ["brand"] = "Karin", - ["model"] = "bjxl", - ["price"] = 19000, - ["category"] = "suvs", - ["hash"] = `bjxl`, - ["shop"] = "pdm", - }, - ["blade"] = { - ["name"] = "Blade", - ["brand"] = "Vapid", - ["model"] = "blade", - ["price"] = 23500, - ["category"] = "muscle", - ["hash"] = `blade`, - ["shop"] = "pdm", - }, - ["blazer"] = { - ["name"] = 'Blazer', - ["price"] = 7500, - ["category"] = "offroad", - ["model"] = "blazer", - ["hash"] = `blazer`, - ["shop"] = "pdm", - }, - ["blazer4"] = { - ["name"] = 'Blazer Sport', - ["brand"] = "Annis", - ["price"] = 9250, - ["category"] = "offroad", - ["model"] = "blazer4", - ["hash"] = `blazer4`, - ["shop"] = "pdm", - }, - ["blista"] = { - ["name"] = "Blista", - ["brand"] = "Dinka", - ["model"] = "blista", - ["price"] = 13000, - ["category"] = "compacts", - ["hash"] = `blista`, - ["shop"] = "pdm", - }, - ["blista2"] = { - ["name"] = "Blista Compact", - ["brand"] = "Dinka", - ["model"] = "blista2", - ["price"] = 18950, - ["category"] = "compacts", - ["hash"] = `blista2`, - ["shop"] = "pdm", - }, - ["bobcatxl"] = { - ["name"] = "Bobcat XL Open", - ["brand"] = "Vapid", - ["model"] = "bobcatxl", - ["price"] = 13500, - ["category"] = "vans", - ["hash"] = `bobcatxl`, - ["shop"] = "pdm", - }, - ["brawler"] = { - ["name"] = "Brawler", - ["brand"] = "Annis", - ["price"] = 40000, - ["category"] = "offroad", - ["model"] = "brawler", - ["hash"] = `brawler`, - ["shop"] = "pdm", - }, - ["brioso"] = { - ["name"] = "Brioso R/A", - ["brand"] = "Grotti", - ["model"] = "brioso", - ["price"] = 20000, - ["category"] = "compacts", - ["hash"] = `brioso`, - ["shop"] = "pdm", - }, - ["btype"] = { --meme car that goes pretty fast - ["name"] = "Roosevelt", - ["brand"] = "Albany", - ["model"] = "btype", - ["price"] = 75000, - ["category"] = "sportsclassics", - ["hash"] = `btype`, - ["shop"] = "pdm", - }, - ["btype2"] = { - ["name"] = "Franken Stange", - ["brand"] = "Albany", - ["model"] = "btype2", - ["price"] = 87000, - ["category"] = "sportsclassics", - ["hash"] = `btype2`, - ["shop"] = "pdm", - }, - ["btype3"] = { - ["name"] = "Roosevelt Valor", - ["brand"] = "Albany", - ["model"] = "btype3", - ["price"] = 63000, - ["category"] = "sportsclassics", - ["hash"] = `btype3`, - ["shop"] = "pdm", - }, - ["buccaneer"] = { - ["name"] = "Buccaneer", - ["brand"] = "Albany", - ["model"] = "buccaneer", - ["price"] = 22500, - ["category"] = "muscle", - ["hash"] = `buccaneer`, - ["shop"] = "pdm", - }, - ["buccaneer2"] = { - ["name"] = "Buccaneer Rider", - ["brand"] = "Albany", - ["model"] = "buccaneer2", - ["price"] = 24500, - ["category"] = "muscle", - ["hash"] = `buccaneer2`, - ["shop"] = "pdm", - }, - ["buffalo"] = { - ["name"] = "Buffalo", - ["brand"] = "Bravado", - ["model"] = "buffalo", - ["price"] = 18750, - ["category"] = "sports", - ["hash"] = `buffalo`, - ["shop"] = "pdm", - }, - ["buffalo2"] = { - ["name"] = "Buffalo S", - ["brand"] = "Bravado", - ["model"] = "buffalo2", - ["price"] = 24500, - ["category"] = "sports", - ["hash"] = `buffalo2`, - ["shop"] = "pdm", - }, - ["bullet"] = { - ["name"] = "Bullet", - ["brand"] = "Vapid", - ["model"] = "bullet", - ["price"] = 120000, - ["category"] = "super", - ["hash"] = `bullet`, - ["shop"] = "pdm", - }, - ["burrito3"] = { - ["name"] = "Burrito", - ["brand"] = "Declasse", - ["model"] = "burrito3", - ["price"] = 4000, - ["category"] = "vans", - ["hash"] = `burrito3`, - ["shop"] = "pdm", - }, - ["gburrito2"] = { - ["name"] = "Burrito Custom", - ["brand"] = "Declasse", - ["model"] = "gburrito2", - ["price"] = 11500, - ["category"] = "vans", - ["hash"] = `gburrito2`, - ["shop"] = "pdm", - }, - ["carbonizzare"] = { - ["name"] = "Carbonizzare", - ["brand"] = "Grotti", - ["model"] = "carbonizzare", - ["price"] = 155000, - ["category"] = "sports", - ["hash"] = `carbonizzare`, - ["shop"] = "pdm", - }, - ["carbonrs"] = { - ["name"] = "Carbon RS", - ["brand"] = "Nagasaki", - ["model"] = "carbonrs", - ["price"] = 22000, - ["category"] = "motorcycles", - ["hash"] = `carbonrs`, - ["shop"] = "pdm", - }, - ["casco"] = { - ["name"] = "Casco", - ["brand"] = "Lampadati", - ["model"] = "casco", - ["price"] = 100000, - ["category"] = "sportsclassics", - ["hash"] = `casco`, - ["shop"] = "pdm", - }, - ["cavalcade2"] = { - ["name"] = "Cavalcade", - ["brand"] = "Albany", - ["model"] = "cavalcade2", - ["price"] = 16500, - ["category"] = "suvs", - ["hash"] = `cavalcade2`, - ["shop"] = "pdm", - }, - ["cheetah"] = { - ["name"] = "Cheetah", - ["brand"] = "Grotti", - ["model"] = "cheetah", - ["price"] = 214000, - ["category"] = "super", - ["hash"] = `cheetah`, - ["shop"] = "pdm", - }, - ["cheetah2"] = { - ["name"] = "Cheetah Classic", - ["brand"] = "Grotti", - ["model"] = "cheetah2", - ["price"] = 195000, - ["category"] = "sports", - ["hash"] = `cheetah2`, - ["shop"] = "pdm", - }, - ["chimera"] = { - ["name"] = "Chimera", - ["brand"] = "Nagasaki", - ["model"] = "chimera", - ["price"] = 21000, - ["category"] = "motorcycles", - ["hash"] = `chimera`, - ["shop"] = "pdm", - }, - ["chino"] = { - ["name"] = "Chino", - ["brand"] = "Vapid", - ["model"] = "chino", - ["price"] = 5000, - ["category"] = "muscle", - ["hash"] = `chino`, - ["shop"] = "pdm", - }, - ["chino2"] = { - ["name"] = "Chino Luxe", - ["brand"] = "Vapid", - ["model"] = "chino2", - ["price"] = 8000, - ["category"] = "muscle", - ["hash"] = `chino2`, - ["shop"] = "pdm", - }, - ["cogcabrio"] = { - ["name"] = "Cognoscenti Cabrio", - ["brand"] = "Enus", - ["model"] = "cogcabrio", - ["price"] = 30000, - ["category"] = "coupes", - ["hash"] = `cogcabrio`, - ["shop"] = "pdm", - }, - ["cognoscenti"] = { - ["name"] = "Cognoscenti", - ["brand"] = "Enus", - ["model"] = "cognoscenti", - ["price"] = 22500, - ["category"] = "sedans", - ["hash"] = `cognoscenti`, - ["shop"] = "pdm", - }, - ["comet2"] = { - ["name"] = "Comet", - ["brand"] = "Pfister", - ["model"] = "comet2", - ["price"] = 130000, - ["category"] = "sports", - ["hash"] = `comet2`, - ["shop"] = "pdm", - }, - ["comet3"] = { - ["name"] = "Comet Retro Custom", - ["brand"] = "Pfister", - ["model"] = "comet3", - ["price"] = 175000, - ["category"] = "sports", - ["hash"] = `comet3`, - ["shop"] = "pdm", - }, - ["comet5"] = { - ["name"] = "Comet SR", - ["brand"] = "Pfister", - ["model"] = "comet5", - ["price"] = 155000, - ["category"] = "sports", - ["hash"] = `comet5`, - ["shop"] = "pdm", - }, - ["coquette"] = { - ["name"] = "Coquette", - ["brand"] = "Invetero", - ["model"] = "coquette", - ["price"] = 145000, - ["category"] = "sports", - ["hash"] = `coquette`, - ["shop"] = "pdm", - }, - ["coquette2"] = { - ["name"] = "Coquette Classic", - ["brand"] = "Invetero", - ["model"] = "coquette2", - ["price"] = 165000, - ["category"] = "sportsclassics", - ["hash"] = `coquette2`, - ["shop"] = "pdm", - }, - ["coquette3"] = { - ["name"] = "Coquette BlackFin", - ["brand"] = "Invetero", - ["model"] = "coquette3", - ["price"] = 180000, - ["category"] = "muscle", - ["hash"] = `coquette3`, - ["shop"] = "pdm", - }, - ["cyclone"] = { --might be too overpowered - ["name"] = "Cyclone", - ["brand"] = "Coil", - ["model"] = "cyclone", - ["price"] = 300000, - ["category"] = "super", - ["hash"] = `cyclone`, - ["shop"] = "pdm", - }, - ["daemon"] = { - ["name"] = "Daemon", - ["brand"] = "WMC", - ["model"] = "daemon", - ["price"] = 14000, - ["category"] = "motorcycles", - ["hash"] = `daemon`, - ["shop"] = "pdm", - }, - ["defiler"] = { - ["name"] = "Defiler", - ["brand"] = "Shitzu", - ["model"] = "defiler", - ["price"] = 30000, - ["category"] = "motorcycles", - ["hash"] = `defiler`, - ["shop"] = "pdm", - }, - ["dilettante"] = { - ["name"] = "Dilettante", - ["brand"] = "Karin", - ["model"] = "dilettante", - ["price"] = 9000, - ["category"] = "compacts", - ["hash"] = `dilettante`, - ["shop"] = "pdm", - }, - ["dominator"] = { - ["name"] = "Dominator", - ["brand"] = "Vapid", - ["model"] = "dominator", - ["price"] = 62500, - ["category"] = "muscle", - ["hash"] = `dominator`, - ["shop"] = "pdm", - }, - ["dubsta2"] = { - ["name"] = "Dubsta Luxuary", - ["brand"] = "Benefactor", - ["model"] = "dubsta2", - ["price"] = 19500, - ["category"] = "suvs", - ["hash"] = `dubsta2`, - ["shop"] = "pdm", - }, - ["dubsta3"] = { - ["name"] = "Dubsta 6x6", - ["brand"] = "Annis", - ["price"] = 34000, - ["category"] = "offroad", - ["model"] = "dubsta3", - ["hash"] = `dubsta3`, - ["shop"] = "pdm", - }, - ["dukes"] = { - ["name"] = "Dukes", - ["brand"] = "Imponte", - ["model"] = "dukes", - ["price"] = 23500, - ["category"] = "muscle", - ["hash"] = `dukes`, - ["shop"] = "pdm", - }, - ["dune"] = { - ["name"] = "Dune Buggy", - ["brand"] = "Annis", - ["price"] = 14000, - ["category"] = "offroad", - ["model"] = "dune", - ["hash"] = `dune`, - ["shop"] = "pdm", - }, - ["elegy"] = { - ["name"] = "Elegy Retro Custom", - ["brand"] = "Annis", - ["model"] = "elegy", - ["price"] = 145000, - ["category"] = "sports", - ["hash"] = `elegy`, - ["shop"] = "pdm", - }, - ["elegy2"] = { - ["name"] = "Elegy RH8", - ["brand"] = "Annis", - ["model"] = "elegy2", - ["price"] = 150000, - ["category"] = "sports", - ["hash"] = `elegy2`, - ["shop"] = "pdm", - }, - ["ellie"] = { - ["name"] = "Ellie", - ["brand"] = "Vapid", - ["model"] = "ellie", - ["price"] = 42250, - ["category"] = "muscle", - ["hash"] = `ellie`, - ["shop"] = "pdm", - }, - ["emperor"] = { - ["name"] = "Emperor", - ["brand"] = "Albany", - ["model"] = "emperor", - ["price"] = 4250, - ["category"] = "sedans", - ["hash"] = `emperor`, - ["shop"] = "pdm", - }, - ["entity2"] = { - ["name"] = "Entity XXR", - ["brand"] = "Överflöd", - ["model"] = "entity2", - ["price"] = 164000, - ["category"] = "super", - ["hash"] = `entity2`, - ["shop"] = "pdm", - }, - ["entityxf"] = { - ["name"] = "Entity XF", - ["brand"] = "Överflöd", - ["model"] = "entityxf", - ["price"] = 180000, - ["category"] = "super", - ["hash"] = `entityxf`, - ["shop"] = "pdm", - }, - ["esskey"] = { - ["name"] = "Esskey", - ["brand"] = "Pegassi", - ["model"] = "esskey", - ["price"] = 12000, - ["category"] = "motorcycles", - ["hash"] = `esskey`, - ["shop"] = "pdm", - }, - ["exemplar"] = { - ["name"] = "Exemplar", - ["brand"] = "Dewbauchee", - ["model"] = "exemplar", - ["price"] = 40000, - ["category"] = "coupes", - ["hash"] = `exemplar`, - ["shop"] = "pdm", - }, - ["f620"] = { - ["name"] = "F620", - ["brand"] = "Ocelot", - ["model"] = "f620", - ["price"] = 32500, - ["category"] = "coupes", - ["hash"] = `f620`, - ["shop"] = "pdm", - }, - ["faction"] = { - ["name"] = "Faction", - ["brand"] = "Willard", - ["model"] = "faction", - ["price"] = 17000, - ["category"] = "muscle", - ["hash"] = `faction`, - ["shop"] = "pdm", - }, - ["faction2"] = { - ["name"] = "Faction Rider", - ["brand"] = "Willard", - ["model"] = "faction2", - ["price"] = 19000, - ["category"] = "muscle", - ["hash"] = `faction2`, - ["shop"] = "pdm", - }, - ["fagaloa"] = { - ["name"] = "Fagaloa", - ["brand"] = "Vulcar", - ["model"] = "fagaloa", - ["price"] = 13000, - ["category"] = "sportsclassics", - ["hash"] = `fagaloa`, - ["shop"] = "pdm", - }, - ["faggio"] = { - ["name"] = "Faggio Sport", - ["brand"] = "Pegassi", - ["model"] = "faggio", - ["price"] = 2000, - ["category"] = "motorcycles", - ["hash"] = `faggio`, - ["shop"] = "pdm", - }, - ["faggio3"] = { - ["name"] = "Faggio Mod", - ["brand"] = "Pegassi", - ["model"] = "faggio3", - ["price"] = 2500, - ["category"] = "motorcycles", - ["hash"] = `faggio3`, - ["shop"] = "pdm", - }, - ["felon"] = { - ["name"] = "Felon", - ["brand"] = "Lampadati", - ["model"] = "felon", - ["price"] = 31000, - ["category"] = "coupes", - ["hash"] = `felon`, - ["shop"] = "pdm", - }, - ["felon2"] = { - ["name"] = "Felon GT", - ["brand"] = "Lampadati", - ["model"] = "felon2", - ["price"] = 37000, - ["category"] = "coupes", - ["hash"] = `felon2`, - ["shop"] = "pdm", - }, - ["feltzer2"] = { - ["name"] = "Feltzer", - ["brand"] = "Benefactor", - ["model"] = "feltzer2", - ["price"] = 97000, - ["category"] = "sports", - ["hash"] = `feltzer2`, - ["shop"] = "pdm", - }, - ["feltzer3"] = { - ["name"] = "Stirling GT", - ["brand"] = "Benefactor", - ["model"] = "feltzer3", - ["price"] = 115000, - ["category"] = "sportsclassics", - ["hash"] = `feltzer3`, - ["shop"] = "pdm", - }, - ["flashgt"] = { - ["name"] = "Flash GT", - ["brand"] = "Vapid", - ["model"] = "flashgt", - ["price"] = 48000, - ["category"] = "sports", - ["hash"] = `flashgt`, - ["shop"] = "pdm", - }, - ["fmj"] = { - ["name"] = "FMJ", - ["brand"] = "Vapid", - ["model"] = "fmj", - ["price"] = 125000, - ["category"] = "super", - ["hash"] = `fmj`, - ["shop"] = "pdm", - }, - ["fq2"] = { - ["name"] = "FQ2", - ["brand"] = "Fathom", - ["model"] = "fq2", - ["price"] = 18500, - ["category"] = "suvs", - ["hash"] = `fq2`, - ["shop"] = "pdm", - }, - ["fugitive"] = { - ["name"] = "Fugitive", - ["brand"] = "Cheval", - ["model"] = "fugitive", - ["price"] = 20000, - ["category"] = "sedans", - ["hash"] = `fugitive`, - ["shop"] = "pdm", - }, - ["furoregt"] = { - ["name"] = "Furore GT", - ["brand"] = "Lampadati", - ["model"] = "furoregt", - ["price"] = 78000, - ["category"] = "sports", - ["hash"] = `furoregt`, - ["shop"] = "pdm", - }, - ["futo"] = { - ["name"] = "Futo", - ["brand"] = "Karin", - ["model"] = "futo", - ["price"] = 17500, - ["category"] = "coupes", - ["hash"] = `futo`, - ["shop"] = "pdm", - }, - ["gauntlet"] = { - ["name"] = "Gauntlet", - ["brand"] = "Bravado", - ["model"] = "gauntlet", - ["price"] = 28500, - ["category"] = "muscle", - ["hash"] = `gauntlet`, - ["shop"] = "pdm", - }, - ["glendale"] = { - ["name"] = "Glendale", - ["brand"] = "Benefactor", - ["model"] = "glendale", - ["price"] = 3400, - ["category"] = "sedans", - ["hash"] = `glendale`, - ["shop"] = "pdm", - }, - ["gp1"] = { - ["name"] = "GP1", - ["brand"] = "Progen", - ["model"] = "gp1", - ["price"] = 110000, - ["category"] = "super", - ["hash"] = `gp1`, - ["shop"] = "pdm", - }, - ["granger"] = { - ["name"] = "Granger", - ["brand"] = "Declasse", - ["model"] = "granger", - ["price"] = 22000, - ["category"] = "suvs", - ["hash"] = `granger`, - ["shop"] = "pdm", - }, - ["gresley"] = { - ["name"] = "Gresley", - ["brand"] = "Bravado", - ["model"] = "gresley", - ["price"] = 25000, - ["category"] = "suvs", - ["hash"] = `gresley`, - ["shop"] = "pdm", - }, - ["gt500"] = { - ["name"] = "GT500", - ["brand"] = "Grotti", - ["model"] = "gt500", - ["price"] = 130000, - ["category"] = "sportsclassics", - ["hash"] = `gt500`, - ["shop"] = "pdm", - }, - ["guardian"] = { - ["name"] = "Guardian", - ["brand"] = "Annis", - ["price"] = 21000, - ["category"] = "offroad", - ["model"] = "guardian", - ["hash"] = `guardian`, - ["shop"] = "pdm", - }, - ["hakuchou"] = { - ["name"] = "Hakuchou", - ["brand"] = "Shitzu", - ["model"] = "hakuchou", - ["price"] = 17000, - ["category"] = "motorcycles", - ["hash"] = `hakuchou`, - ["shop"] = "pdm", - }, - ["hexer"] = { - ["name"] = "Hexer", - ["brand"] = "LCC", - ["model"] = "hexer", - ["price"] = 16000, - ["category"] = "motorcycles", - ["hash"] = `hexer`, - ["shop"] = "pdm", - }, - ["hotknife"] = { - ["name"] = "Hotknife", - ["brand"] = "Vapid", - ["model"] = "hotknife", - ["price"] = 90000, - ["category"] = "muscle", - ["hash"] = `hotknife`, - ["shop"] = "pdm", - }, - ["huntley"] = { - ["name"] = "Huntley S", - ["brand"] = "Enus", - ["model"] = "huntley", - ["price"] = 24500, - ["category"] = "suvs", - ["hash"] = `huntley`, - ["shop"] = "pdm", - }, - ["hustler"] = { - ["name"] = "Hustler", - ["brand"] = "Vapid", - ["model"] = "hustler", - ["price"] = 95000, - ["category"] = "muscle", - ["hash"] = `hustler`, - ["shop"] = "pdm", - }, - ["infernus"] = { - ["name"] = "Infernus", - ["brand"] = "Pegassi", - ["model"] = "infernus", - ["price"] = 235000, - ["category"] = "super", - ["hash"] = `infernus`, - ["shop"] = "pdm", - }, - ["infernus2"] = { - ["name"] = "Infernus Classic", - ["brand"] = "Pegassi", - ["model"] = "infernus2", - ["price"] = 245000, - ["category"] = "sportsclassics", - ["hash"] = `infernus2`, - ["shop"] = "pdm", - }, - ["intruder"] = { - ["name"] = "Intruder", - ["brand"] = "Karin", - ["model"] = "intruder", - ["price"] = 11250, - ["category"] = "sedans", - ["hash"] = `intruder`, - ["shop"] = "pdm", - }, - ["issi2"] = { - ["name"] = "Issi", - ["brand"] = "Weeny", - ["model"] = "issi2", - ["price"] = 7000, - ["category"] = "compacts", - ["hash"] = `issi2`, - ["shop"] = "pdm", - }, - ["issi3"] = { - ["name"] = "Issi Classic", - ["brand"] = "Weeny", - ["model"] = "issi3", - ["price"] = 5000, - ["category"] = "compacts", - ["hash"] = `issi3`, - ["shop"] = "pdm", - }, - ["italigtb"] = { - ["name"] = "Itali GTB", - ["brand"] = "Progen", - ["model"] = "italigtb", - ["price"] = 170000, - ["category"] = "super", - ["hash"] = `italigtb`, - ["shop"] = "pdm", - }, - ["jackal"] = { - ["name"] = "Jackal", - ["brand"] = "Ocelot", - ["model"] = "jackal", - ["price"] = 19000, - ["category"] = "coupes", - ["hash"] = `jackal`, - ["shop"] = "pdm", - }, - ["jester"] = { - ["name"] = "Jester", - ["brand"] = "Dinka", - ["model"] = "jester", - ["price"] = 132250, - ["category"] = "sports", - ["hash"] = `jester`, - ["shop"] = "pdm", - }, - ["jester3"] = { - ["name"] = "Jester Classic", - ["brand"] = "Dinka", - ["model"] = "jester3", - ["price"] = 85000, - ["category"] = "sports", - ["hash"] = `jester3`, - ["shop"] = "pdm", - }, - ["khamelion"] = { - ["name"] = "Khamelion", - ["brand"] = "Hijak", - ["model"] = "khamelion", - ["price"] = 90000, - ["category"] = "sports", - ["hash"] = `khamelion`, - ["shop"] = "pdm", - }, - ["kuruma"] = { - ["name"] = "Kuruma", - ["brand"] = "Karin", - ["model"] = "kuruma", - ["price"] = 72000, - ["category"] = "sports", - ["hash"] = `kuruma`, - ["shop"] = "pdm", - }, - ["landstalker"] = { - ["name"] = "Landstalker", - ["brand"] = "Dundreary", - ["model"] = "landstalker", - ["price"] = 12000, - ["category"] = "suvs", - ["hash"] = `landstalker`, - ["shop"] = "pdm", - }, - ["lynx"] = { - ["name"] = "Lynx", - ["brand"] = "Ocelot", - ["model"] = "lynx", - ["price"] = 150000, - ["category"] = "sports", - ["hash"] = `lynx`, - ["shop"] = "pdm", - }, - ["mamba"] = { - ["name"] = "Mamba", - ["brand"] = "Declasse", - ["model"] = "mamba", - ["price"] = 140000, - ["category"] = "sportsclassics", - ["hash"] = `mamba`, - ["shop"] = "pdm", - }, - ["massacro"] = { - ["name"] = "Massacro", - ["brand"] = "Dewbauchee", - ["model"] = "massacro", - ["price"] = 110000, - ["category"] = "sports", - ["hash"] = `massacro`, - ["shop"] = "pdm", - }, - ["monroe"] = { - ["name"] = "Monroe", - ["brand"] = "Pegassi", - ["model"] = "monroe", - ["price"] = 115000, - ["category"] = "sportsclassics", - ["hash"] = `monroe`, - ["shop"] = "pdm", - }, - ["moonbeam"] = { - ["name"] = "Moonbeam", - ["brand"] = "Declasse", - ["model"] = "moonbeam", - ["price"] = 13000, - ["category"] = "vans", - ["hash"] = `moonbeam`, - ["shop"] = "pdm", - }, - ["nemesis"] = { - ["name"] = "Nemesis", - ["brand"] = "Principe", - ["model"] = "nemesis", - ["price"] = 20000, - ["category"] = "motorcycles", - ["hash"] = `nemesis`, - ["shop"] = "pdm", - }, - ["neon"] = { - ["name"] = "Neon", - ["brand"] = "Pfister", - ["model"] = "neon", - ["price"] = 220000, - ["category"] = "sports", - ["hash"] = `neon`, - ["shop"] = "pdm", - }, - ["nero"] = { - ["name"] = "Nero", - ["brand"] = "Truffade", - ["model"] = "nero", - ["price"] = 200000, - ["category"] = "super", - ["hash"] = `nero`, - ["shop"] = "pdm", - }, - ["nightblade"] = { - ["name"] = "Nightblade", - ["brand"] = "WMC", - ["model"] = "nightblade", - ["price"] = 23000, - ["category"] = "motorcycles", - ["hash"] = `nightblade`, - ["shop"] = "pdm", - }, - ["nightshade"] = { - ["name"] = "Nightshade", - ["brand"] = "Imponte", - ["model"] = "nightshade", - ["price"] = 70000, - ["category"] = "muscle", - ["hash"] = `nightshade`, - ["shop"] = "pdm", - }, - ["ninef"] = { - ["name"] = "9F", - ["brand"] = "Obey", - ["model"] = "ninef", - ["price"] = 95000, - ["category"] = "sports", - ["hash"] = `ninef`, - ["shop"] = "pdm", - }, - ["ninef2"] = { - ["name"] = "9F Cabrio", - ["brand"] = "Obey", - ["model"] = "ninef2", - ["price"] = 105000, - ["category"] = "sports", - ["hash"] = `ninef2`, - ["shop"] = "pdm", - }, - ["omnis"] = { - ["name"] = "Omnis", - ["brand"] = "Wow", - ["model"] = "omnis", - ["price"] = 90000, - ["category"] = "sports", - ["hash"] = `omnis`, - ["shop"] = "pdm", - }, - ["oracle"] = { - ["name"] = "Oracle", - ["brand"] = "Ubermacht", - ["model"] = "oracle", - ["price"] = 22000, - ["category"] = "sedans", - ["hash"] = `oracle`, - ["shop"] = "pdm", - }, - ["oracle2"] = { - ["name"] = "Oracle XS", - ["brand"] = "Übermacht", - ["model"] = "oracle2", - ["price"] = 28000, - ["category"] = "coupes", - ["hash"] = `oracle2`, - ["shop"] = "pdm", - }, - ["osiris"] = { - ["name"] = "Osiris", - ["brand"] = "Pegassi", - ["model"] = "osiris", - ["price"] = 220000, - ["category"] = "super", - ["hash"] = `osiris`, - ["shop"] = "pdm", - }, - ["panto"] = { - ["name"] = "Panto", - ["brand"] = "Benefactor", - ["model"] = "panto", - ["price"] = 3200, - ["category"] = "compacts", - ["hash"] = `panto`, - ["shop"] = "pdm", - }, - ["pariah"] = { - ["name"] = "Pariah", - ["brand"] = "Ocelot", - ["model"] = "pariah", - ["price"] = 90000, - ["category"] = "sports", - ["hash"] = `pariah`, - ["shop"] = "pdm", - }, - ["patriot"] = { - ["name"] = "Patriot", - ["brand"] = "Mammoth", - ["model"] = "patriot", - ["price"] = 21000, - ["category"] = "suvs", - ["hash"] = `patriot`, - ["shop"] = "pdm", - }, - ["pcj"] = { - ["name"] = "PCJ-600", - ["brand"] = "Shitzu", - ["model"] = "pcj", - ["price"] = 15000, - ["category"] = "motorcycles", - ["hash"] = `pcj`, - ["shop"] = "pdm", - }, - ["penetrator"] = { - ["name"] = "Penetrator", - ["brand"] = "Ocelot", - ["model"] = "penetrator", - ["price"] = 130000, - ["category"] = "super", - ["hash"] = `penetrator`, - ["shop"] = "pdm", - }, - ["pfister811"] = { - ["name"] = "811", - ["brand"] = "Pfister", - ["model"] = "pfister811", - ["price"] = 220000, - ["category"] = "super", - ["hash"] = `pfister811`, - ["shop"] = "pdm", - }, - ["phoenix"] = { - ["name"] = "Phoenix", - ["brand"] = "Imponte", - ["model"] = "phoenix", - ["price"] = 65000, - ["category"] = "muscle", - ["hash"] = `phoenix`, - ["shop"] = "pdm", - }, - ["picador"] = { - ["name"] = "Picador", - ["brand"] = "Cheval", - ["model"] = "picador", - ["price"] = 20000, - ["category"] = "muscle", - ["hash"] = `picador`, - ["shop"] = "pdm", - }, - ["pigalle"] = { - ["name"] = "Pigalle", - ["brand"] = "Lampadati", - ["model"] = "pigalle", - ["price"] = 92000, - ["category"] = "sportsclassics", - ["hash"] = `pigalle`, - ["shop"] = "pdm", - }, - ["prairie"] = { - ["name"] = "Prairie", - ["brand"] = "Bollokan", - ["model"] = "prairie", - ["price"] = 30000, - ["category"] = "compacts", - ["hash"] = `prairie`, - ["shop"] = "pdm", - }, - ["premier"] = { - ["name"] = "Premier", - ["brand"] = "Declasse", - ["model"] = "premier", - ["price"] = 12000, - ["category"] = "sedans", - ["hash"] = `premier`, - ["shop"] = "pdm", - }, - ["primo2"] = { - ["name"] = "Primo Custom", - ["brand"] = "Albany", - ["model"] = "primo2", - ["price"] = 14500, - ["category"] = "sedans", - ["hash"] = `primo2`, - ["shop"] = "pdm", - }, - ["prototipo"] = { - ["name"] = "X80 Proto", - ["brand"] = "Grotti", - ["model"] = "prototipo", - ["price"] = 235000, - ["category"] = "super", - ["hash"] = `prototipo`, - ["shop"] = "pdm", - }, - ["radi"] = { - ["name"] = "Radius", - ["brand"] = "Vapid", - ["model"] = "radi", - ["price"] = 18000, - ["category"] = "suvs", - ["hash"] = `radi`, - ["shop"] = "pdm", - }, - ["rapidgt"] = { - ["name"] = "Rapid GT", - ["brand"] = "Dewbauchee", - ["model"] = "rapidgt", - ["price"] = 86000, - ["category"] = "sports", - ["hash"] = `rapidgt`, - ["shop"] = "pdm", - }, - ["rapidgt2"] = { - ["name"] = "Rapid GT Convertible", - ["brand"] = "Dewbauchee", - ["model"] = "rapidgt2", - ["price"] = 92000, - ["category"] = "sports", - ["hash"] = `rapidgt2`, - ["shop"] = "pdm", - }, - ["rapidgt3"] = { - ["name"] = "Rapid GT", - ["brand"] = "Dewbauchee", - ["model"] = "rapidgt3", - ["price"] = 90000, - ["category"] = "sportsclassics", - ["hash"] = `rapidgt3`, - ["shop"] = "pdm", - }, - ["reaper"] = { - ["name"] = "Reaper", - ["brand"] = "Pegassi", - ["model"] = "reaper", - ["price"] = 100000, - ["category"] = "super", - ["hash"] = `reaper`, - ["shop"] = "pdm", - }, - ["rebel2"] = { - ["name"] = "Rebel", - ["brand"] = "Annis", - ["model"] = "rebel2", - ["price"] = 20000, - ["category"] = "offroad", - ["hash"] = `rebel2`, - ["shop"] = "pdm", - }, - ["regina"] = { - ["name"] = "Regina", - ["brand"] = "Dundreary", - ["model"] = "regina", - ["price"] = 7000, - ["category"] = "sedans", - ["hash"] = `regina`, - ["shop"] = "pdm", - }, - ["revolter"] = { - ["name"] = "Revolter", - ["brand"] = "Ubermacht", - ["model"] = "revolter", - ["price"] = 95000, - ["category"] = "sports", - ["hash"] = `revolter`, - ["shop"] = "pdm", - }, - ["rhapsody"] = { - ["name"] = "Rhapsody", - ["brand"] = "Declasse", - ["model"] = "rhapsody", - ["price"] = 10000, - ["category"] = "compacts", - ["hash"] = `rhapsody`, - ["shop"] = "pdm", - }, - ["rocoto"] = { - ["name"] = "Rocoto", - ["brand"] = "Obey", - ["model"] = "rocoto", - ["price"] = 13000, - ["category"] = "suvs", - ["hash"] = `rocoto`, - ["shop"] = "pdm", - }, - ["ruffian"] = { - ["name"] = "Ruffian", - ["brand"] = "Pegassi", - ["model"] = "ruffian", - ["price"] = 25000, - ["category"] = "motorcycles", - ["hash"] = `ruffian`, - ["shop"] = "pdm", - }, - ["rumpo"] = { - ["name"] = "Rumpo", - ["brand"] = "Bravado", - ["model"] = "rumpo", - ["price"] = 9000, - ["category"] = "vans", - ["hash"] = `rumpo`, - ["shop"] = "pdm", - }, - ["ruston"] = { - ["name"] = "Ruston", - ["brand"] = "Hijak", - ["model"] = "ruston", - ["price"] = 130000, - ["category"] = "sports", - ["hash"] = `ruston`, - ["shop"] = "pdm", - }, - ["sabregt"] = { - ["name"] = "Sabre Turbo", - ["brand"] = "Declasse", - ["model"] = "sabregt", - ["price"] = 23000, - ["category"] = "muscle", - ["hash"] = `sabregt`, - ["shop"] = "pdm", - }, - ["sabregt2"] = { - ["name"] = "Sabre GT", - ["brand"] = "Declasse", - ["model"] = "sabregt2", - ["price"] = 26500, - ["category"] = "muscle", - ["hash"] = `sabregt2`, - ["shop"] = "pdm", - }, - ["sandking"] = { - ["name"] = 'Sandking', - ["brand"] = "Annis", - ["price"] = 25000, - ["category"] = "offroad", - ["model"] = "sandking", - ["hash"] = `sandking`, - ["shop"] = "pdm", - }, - ["sc1"] = { - ["name"] = "SC1", - ["brand"] = "Übermacht", - ["model"] = "sc1", - ["price"] = 90000, - ["category"] = "super", - ["hash"] = `sc1`, - ["shop"] = "pdm", - }, - ["schafter2"] = { - ["name"] = "Schafter", - ["brand"] = "Benefactor", - ["model"] = "schafter2", - ["price"] = 16000, - ["category"] = "sedans", - ["hash"] = `schafter2`, - ["shop"] = "pdm", - }, - ["schafter3"] = { - ["name"] = "Schafter V12", - ["brand"] = "Benefactor", - ["model"] = "schafter3", - ["price"] = 35000, - ["category"] = "sports", - ["hash"] = `schafter3`, - ["shop"] = "pdm", - }, - ["seminole"] = { - ["name"] = "Seminole", - ["brand"] = "Canis", - ["model"] = "seminole", - ["price"] = 20000, - ["category"] = "suvs", - ["hash"] = `seminole`, - ["shop"] = "pdm", - }, - ["sentinel"] = { - ["name"] = "Sentinel", - ["brand"] = "Übermacht", - ["model"] = "sentinel", - ["price"] = 30000, - ["category"] = "coupes", - ["hash"] = `sentinel`, - ["shop"] = "pdm", - }, - ["sentinel2"] = { - ["name"] = "Sentinel XS", - ["brand"] = " Übermacht", - ["model"] = "sentinel2", - ["price"] = 33000, - ["category"] = "coupes", - ["hash"] = `sentinel2`, - ["shop"] = "pdm", - }, - ["sentinel3"] = { - ["name"] = "Sentinel Classic", - ["brand"] = "Übermacht", - ["model"] = "sentinel3", - ["price"] = 70000, - ["category"] = "coupes", - ["hash"] = `sentinel3`, - ["shop"] = "pdm", - }, - ["seven70"] = { - ["name"] = "Seven-70", - ["brand"] = "Dewbauchee", - ["model"] = "seven70", - ["price"] = 140000, - ["category"] = "sports", - ["hash"] = `seven70`, - ["shop"] = "pdm", - }, - ["slamvan3"] = { - ["name"] = "Slam Van Custom", - ["brand"] = "Vapid", - ["model"] = "slamvan3", - ["price"] = 17000, - ["category"] = "muscle", - ["hash"] = `slamvan3`, - ["shop"] = "pdm", - }, - ["sovereign"] = { - ["name"] = "Sovereign", - ["brand"] = "WMC", - ["model"] = "sovereign", - ["price"] = 8000, - ["category"] = "motorcycles", - ["hash"] = `sovereign`, - ["shop"] = "pdm", - }, - ["specter"] = { - ["name"] = "Specter", - ["brand"] = "Dewbauchee", - ["model"] = "specter", - ["price"] = 160000, - ["category"] = "sports", - ["hash"] = `specter`, - ["shop"] = "pdm", - }, - ["stafford"] = { - ["name"] = "Stafford", - ["brand"] = "Enus", - ["model"] = "stafford", - ["price"] = 30000, - ["category"] = "sedans", - ["hash"] = `stafford`, - ["shop"] = "pdm", - }, - ["stalion"] = { - ["name"] = "Stallion", - ["brand"] = "Declasse", - ["model"] = "stalion", - ["price"] = 33000, - ["category"] = "muscle", - ["hash"] = `stalion`, - ["shop"] = "pdm", - }, - ["stingergt"] = { - ["name"] = "Stinger GT", - ["brand"] = "Grotti", - ["model"] = "stingergt", - ["price"] = 70000, - ["category"] = "sportsclassics", - ["hash"] = `stingergt`, - ["shop"] = "pdm", - }, - ["streiter"] = { - ["name"] = "Streiter", - ["brand"] = "Benefactor", - ["model"] = "streiter", - ["price"] = 40000, - ["category"] = "sports", - ["hash"] = `streiter`, - ["shop"] = "pdm", - }, - ["sultan"] = { - ["name"] = "Sultan", - ["brand"] = "Karin", - ["model"] = "sultan", - ["price"] = 50000, - ["category"] = "sports", - ["hash"] = `sultan`, - ["shop"] = "pdm", - }, - ["sultanrs"] = { - ["name"] = "Sultan RS", - ["brand"] = "Karin", - ["model"] = "sultanrs", - ["price"] = 76500, - ["category"] = "sports", - ["hash"] = `sultanrs`, - ["shop"] = "pdm", - }, - ["superd"] = { - ["name"] = "Super Diamond", - ["brand"] = "Enus", - ["model"] = "superd", - ["price"] = 17000, - ["category"] = "sedans", - ["hash"] = `superd`, - ["shop"] = "pdm", - }, - ["surano"] = { - ["name"] = "Surano", - ["brand"] = " Benefactor", - ["model"] = "surano", - ["price"] = 80000, - ["category"] = "sports", - ["hash"] = `surano`, - ["shop"] = "pdm", - }, - ["surge"] = { - ["name"] = "Surge", - ["brand"] = "Cheval", - ["model"] = "surge", - ["price"] = 20000, - ["category"] = "sedans", - ["hash"] = `surge`, - ["shop"] = "pdm", - }, - ["t20"] = { - ["name"] = "T20", - ["brand"] = "Progen", - ["model"] = "t20", - ["price"] = 1650000, - ["category"] = "super", - ["hash"] = `t20`, - ["shop"] = "pdm", - }, - ["tailgater"] = { - ["name"] = "Tailgater", - ["brand"] = "Obey", - ["model"] = "tailgater", - ["price"] = 22000, - ["category"] = "sedans", - ["hash"] = `tailgater`, - ["shop"] = "pdm", - }, - ["taipan"] = { - ["name"] = "Taipan", - ["brand"] = "Cheval", - ["model"] = "taipan", - ["price"] = 1850000, - ["category"] = "super", - ["hash"] = `taipan`, - ["shop"] = "pdm", - }, - ["tampa"] = { - ["name"] = "Tampa", - ["brand"] = "Declasse", - ["model"] = "tampa", - ["price"] = 24500, - ["category"] = "muscle", - ["hash"] = `tampa`, - ["shop"] = "pdm", - }, - ["tampa2"] = { - ["name"] = "Drift Tampa", - ["brand"] = "Declasse", - ["model"] = "tampa2", - ["price"] = 80000, - ["category"] = "muscle", - ["hash"] = `tampa2`, - ["shop"] = "pdm", - }, - ["tempesta"] = { - ["name"] = "Tempesta", - ["brand"] = "Pegassi", - ["model"] = "tempesta", - ["price"] = 120000, - ["category"] = "super", - ["hash"] = `tempesta`, - ["shop"] = "pdm", - }, - ["tezeract"] = { - ["name"] = "Tezeract", - ["brand"] = "Pegassi", - ["model"] = "tezeract", - ["price"] = 220000, - ["category"] = "super", - ["hash"] = `tezeract`, - ["shop"] = "pdm", - }, - ["thrust"] = { - ["name"] = "Thrust", - ["brand"] = "Dinka", - ["model"] = "thrust", - ["price"] = 22000, - ["category"] = "motorcycles", - ["hash"] = `thrust`, - ["shop"] = "pdm", - }, - ["torero"] = { - ["name"] = "Torero", - ["brand"] = "Pegassi", - ["model"] = "torero", - ["price"] = 84000, - ["category"] = "sportsclassics", - ["hash"] = `torero`, - ["shop"] = "pdm", - }, - ["trophytruck"] = { - ["name"] = 'Trophy Truck', - ["brand"] = "Annis", - ["price"] = 60000, - ["category"] = "offroad", - ["model"] = "trophytruck", - ["hash"] = `trophytruck`, - ["shop"] = "pdm", - }, - ["trophytruck2"] = { - ["name"] = 'Trophy Truck Limited', - ["brand"] = "Annis", - ["price"] = 80000, - ["category"] = "offroad", - ["model"] = "trophytruck2", - ["hash"] = `trophytruck2`, - ["shop"] = "pdm", - }, - ["turismor"] = { - ["name"] = "Turismo R", - ["brand"] = "Grotti", - ["model"] = "turismor", - ["price"] = 140000, - ["category"] = "super", - ["hash"] = `turismor`, - ["shop"] = "pdm", - }, - ["tyrant"] = { - ["name"] = "Tyrant", - ["brand"] = " Överflöd", - ["model"] = "tyrant", - ["price"] = 2100000, - ["category"] = "super", - ["hash"] = `tyrant`, - ["shop"] = "pdm", - }, - ["vacca"] = { - ["name"] = "Vacca", - ["brand"] = "Pegassi", - ["model"] = "vacca", - ["price"] = 105000, - ["category"] = "super", - ["hash"] = `vacca`, - ["shop"] = "pdm", - }, - ["vagner"] = { - ["name"] = "Vagner", - ["brand"] = "Dewbauchee", - ["model"] = "vagner", - ["price"] = 1660000, - ["category"] = "super", - ["hash"] = `vagner`, - ["shop"] = "pdm", - }, - ["verlierer2"] = { - ["name"] = "Verlierer", - ["brand"] = "Bravado", - ["model"] = "verlierer2", - ["price"] = 90500, - ["category"] = "sports", - ["hash"] = `verlierer2`, - ["shop"] = "pdm", - }, - ["vigero"] = { - ["name"] = "Vigero", - ["brand"] = "Declasse", - ["model"] = "vigero", - ["price"] = 39500, - ["category"] = "muscle", - ["hash"] = `vigero`, - ["shop"] = "pdm", - }, - ["virgo"] = { - ["name"] = "Virgo", - ["brand"] = "Albany", - ["model"] = "virgo", - ["price"] = 22000, - ["category"] = "muscle", - ["hash"] = `virgo`, - ["shop"] = "pdm", - }, - ["visione"] = { - ["name"] = "Visione", - ["brand"] = "Grotti", - ["model"] = "visione", - ["price"] = 750000, - ["category"] = "sports", - ["hash"] = `visione`, - ["shop"] = "pdm", - }, - ["voltic"] = { - ["name"] = "Voltic", - ["brand"] = "Coil", - ["model"] = "voltic", - ["price"] = 120000, - ["category"] = "super", - ["hash"] = `voltic`, - ["shop"] = "pdm", - }, - ["voodoo"] = { - ["name"] = "Voodoo", - ["brand"] = "Declasse", - ["model"] = "voodoo", - ["price"] = 13000, - ["category"] = "muscle", - ["hash"] = `voodoo`, - ["shop"] = "pdm", - }, - ["washington"] = { - ["name"] = "Washington", - ["brand"] = "Albany", - ["model"] = "washington", - ["price"] = 7000, - ["category"] = "sedans", - ["hash"] = `washington`, - ["shop"] = "pdm", - }, - ["windsor"] = { - ["name"] = "Windsor", - ["brand"] = "Enus", - ["model"] = "windsor", - ["price"] = 27000, - ["category"] = "coupes", - ["hash"] = `windsor`, - ["shop"] = "pdm", - }, - ["windsor2"] = { - ["name"] = "Windsor Drop", - ["brand"] = "Enus", - ["model"] = "windsor2", - ["price"] = 34000, - ["category"] = "coupes", - ["hash"] = `windsor2`, - ["shop"] = "pdm", - }, - ["xa21"] = { - ["name"] = "XA-21", - ["brand"] = "Ocelot", - ["model"] = "xa21", - ["price"] = 180000, - ["category"] = "super", - ["hash"] = `xa21`, - ["shop"] = "pdm", - }, - ["xls"] = { - ["name"] = "XLS", - ["brand"] = "Benefactor", - ["model"] = "xls", - ["price"] = 17000, - ["category"] = "suvs", - ["hash"] = `xls`, - ["shop"] = "pdm", - }, - ["yosemite"] = { - ["name"] = "Yosemite", - ["brand"] = "Declasse", - ["model"] = "yosemite", - ["price"] = 19500, - ["category"] = "muscle", - ["hash"] = `yosemite`, - ["shop"] = "pdm", - }, - ["z190"] = { - ["name"] = "190Z", - ["brand"] = "Karin", - ["model"] = "z190", - ["price"] = 78000, - ["category"] = "sportsclassics", - ["hash"] = `z190`, - ["shop"] = "pdm", - }, - ["zentorno"] = { - ["name"] = "Zentorno", - ["brand"] = "Pegassi", - ["model"] = "zentorno", - ["price"] = 340000, - ["category"] = "super", - ["hash"] = `zentorno`, - ["shop"] = "pdm", - }, - ["zion"] = { - ["name"] = "Zion", - ["brand"] = "Übermacht", - ["model"] = "zion", - ["price"] = 22000, - ["category"] = "coupes", - ["hash"] = `zion`, - ["shop"] = "pdm", - }, - ["zion2"] = { - ["name"] = "Zion Cabrio", - ["brand"] = "Übermacht", - ["model"] = "zion2", - ["price"] = 28000, - ["category"] = "coupes", - ["hash"] = `zion2`, - ["shop"] = "pdm", - }, - ["zombieb"] = { - ["name"] = "Zombie Chopper", - ["brand"] = "Western", - ["model"] = "zombieb", - ["price"] = 27000, - ["category"] = "motorcycles", - ["hash"] = `zombieb`, - ["shop"] = "pdm", - }, - ["ztype"] = { - ["name"] = "Z-Type", - ["brand"] = "Truffade", - ["model"] = "ztype", - ["price"] = 270000, - ["category"] = "sportsclassics", - ["hash"] = `ztype`, - ["shop"] = "pdm", + ['adder'] = { + ['name'] = 'Adder', + ['brand'] = 'Truffade', + ['model'] = 'adder', + ['price'] = 280000, + ['category'] = 'super', + ['hash'] = `adder`, + ['shop'] = 'pdm', + }, + ['alpha'] = { + ['name'] = 'Alpha', + ['brand'] = 'Albany', + ['model'] = 'alpha', + ['price'] = 53000, + ['category'] = 'sports', + ['hash'] = `alpha`, + ['shop'] = 'pdm', + }, + ['ardent'] = { + ['name'] = 'Ardent', + ['brand'] = 'Ocelot', + ['model'] = 'ardent', + ['price'] = 30000, + ['category'] = 'sportsclassics', + ['hash'] = `ardent`, + ['shop'] = 'pdm', + }, + ['asea'] = { + ['name'] = 'Asea', + ['brand'] = 'Declasse', + ['model'] = 'asea', + ['price'] = 2500, + ['category'] = 'sedans', + ['hash'] = `asea`, + ['shop'] = 'pdm', + }, + ['autarch'] = { + ['name'] = 'Autarch', + ['brand'] = 'Överflöd', + ['model'] = 'autarch', + ['price'] = 224000, + ['category'] = 'super', + ['hash'] = `autarch`, + ['shop'] = 'pdm', + }, + ['avarus'] = { + ['name'] = 'Avarus', + ['brand'] = 'LCC', + ['model'] = 'avarus', + ['price'] = 20000, + ['category'] = 'motorcycles', + ['hash'] = `avarus`, + ['shop'] = 'pdm', + }, + ['bagger'] = { + ['name'] = 'Bagger', + ['brand'] = 'WMC', + ['model'] = 'bagger', + ['price'] = 13500, + ['category'] = 'motorcycles', + ['hash'] = `bagger`, + ['shop'] = 'pdm', + }, + ['baller2'] = { + ['name'] = 'Baller', + ['brand'] = 'Gallivanter', + ['model'] = 'baller2', + ['price'] = 15000, + ['category'] = 'suvs', + ['hash'] = `baller2`, + ['shop'] = 'pdm', + }, + ['baller3'] = { + ['name'] = 'Baller LE', + ['brand'] = 'Gallivanter', + ['model'] = 'baller3', + ['price'] = 15000, + ['category'] = 'suvs', + ['hash'] = `baller3`, + ['shop'] = 'pdm', + }, + ['banshee'] = { + ['name'] = 'Banshee', + ['brand'] = 'Bravado', + ['model'] = 'banshee', + ['price'] = 56000, + ['category'] = 'sports', + ['hash'] = `banshee`, + ['shop'] = 'pdm', + }, + ['banshee2'] = { + ['name'] = 'Banshee 900R', + ['brand'] = 'Bravado', + ['model'] = 'banshee2', + ['price'] = 120000, + ['category'] = 'super', + ['hash'] = `banshee2`, + ['shop'] = 'pdm', + }, + ['bati'] = { + ['name'] = 'Bati 801', + ['brand'] = 'Pegassi', + ['model'] = 'bati', + ['price'] = 24000, + ['category'] = 'motorcycles', + ['hash'] = `bati`, + ['shop'] = 'pdm', + }, + ['bestiagts'] = { + ['name'] = 'Bestia GTS', + ['brand'] = 'Grotti', + ['model'] = 'bestiagts', + ['price'] = 37000, + ['category'] = 'sports', + ['hash'] = `bestiagts`, + ['shop'] = 'pdm', + }, + ['bfinjection'] = { + ['name'] = 'Bf Injection', + ['brand'] = 'Annis', + ['price'] = 9000, + ['category'] = 'offroad', + ['model'] = 'bfinjection', + ['hash'] = `bfinjection`, + ['shop'] = 'pdm', + }, + ['bifta'] = { + ['name'] = 'Bifta', + ['brand'] = 'Annis', + ['price'] = 15500, + ['category'] = 'offroad', + ['model'] = 'bifta', + ['hash'] = `bifta`, + ['shop'] = 'pdm', + }, + ['bison'] = { + ['name'] = 'Bison', + ['brand'] = 'Bravado', + ['model'] = 'bison', + ['price'] = 18000, + ['category'] = 'vans', + ['hash'] = `bison`, + ['shop'] = 'pdm', + }, + ['bjxl'] = { + ['name'] = 'BeeJay XL', + ['brand'] = 'Karin', + ['model'] = 'bjxl', + ['price'] = 19000, + ['category'] = 'suvs', + ['hash'] = `bjxl`, + ['shop'] = 'pdm', + }, + ['blade'] = { + ['name'] = 'Blade', + ['brand'] = 'Vapid', + ['model'] = 'blade', + ['price'] = 23500, + ['category'] = 'muscle', + ['hash'] = `blade`, + ['shop'] = 'pdm', + }, + ['blazer'] = { + ['name'] = 'Blazer', + ['price'] = 7500, + ['category'] = 'offroad', + ['model'] = 'blazer', + ['hash'] = `blazer`, + ['shop'] = 'pdm', + }, + ['blazer4'] = { + ['name'] = 'Blazer Sport', + ['brand'] = 'Annis', + ['price'] = 9250, + ['category'] = 'offroad', + ['model'] = 'blazer4', + ['hash'] = `blazer4`, + ['shop'] = 'pdm', + }, + ['blista'] = { + ['name'] = 'Blista', + ['brand'] = 'Dinka', + ['model'] = 'blista', + ['price'] = 13000, + ['category'] = 'compacts', + ['hash'] = `blista`, + ['shop'] = 'pdm', + }, + ['blista2'] = { + ['name'] = 'Blista Compact', + ['brand'] = 'Dinka', + ['model'] = 'blista2', + ['price'] = 18950, + ['category'] = 'compacts', + ['hash'] = `blista2`, + ['shop'] = 'pdm', + }, + ['bobcatxl'] = { + ['name'] = 'Bobcat XL Open', + ['brand'] = 'Vapid', + ['model'] = 'bobcatxl', + ['price'] = 13500, + ['category'] = 'vans', + ['hash'] = `bobcatxl`, + ['shop'] = 'pdm', + }, + ['brawler'] = { + ['name'] = 'Brawler', + ['brand'] = 'Annis', + ['price'] = 40000, + ['category'] = 'offroad', + ['model'] = 'brawler', + ['hash'] = `brawler`, + ['shop'] = 'pdm', + }, + ['brioso'] = { + ['name'] = 'Brioso R/A', + ['brand'] = 'Grotti', + ['model'] = 'brioso', + ['price'] = 20000, + ['category'] = 'compacts', + ['hash'] = `brioso`, + ['shop'] = 'pdm', + }, + ['btype'] = { --meme car that goes pretty fast + ['name'] = 'Roosevelt', + ['brand'] = 'Albany', + ['model'] = 'btype', + ['price'] = 75000, + ['category'] = 'sportsclassics', + ['hash'] = `btype`, + ['shop'] = 'pdm', + }, + ['btype2'] = { + ['name'] = 'Franken Stange', + ['brand'] = 'Albany', + ['model'] = 'btype2', + ['price'] = 87000, + ['category'] = 'sportsclassics', + ['hash'] = `btype2`, + ['shop'] = 'pdm', + }, + ['btype3'] = { + ['name'] = 'Roosevelt Valor', + ['brand'] = 'Albany', + ['model'] = 'btype3', + ['price'] = 63000, + ['category'] = 'sportsclassics', + ['hash'] = `btype3`, + ['shop'] = 'pdm', + }, + ['buccaneer'] = { + ['name'] = 'Buccaneer', + ['brand'] = 'Albany', + ['model'] = 'buccaneer', + ['price'] = 22500, + ['category'] = 'muscle', + ['hash'] = `buccaneer`, + ['shop'] = 'pdm', + }, + ['buccaneer2'] = { + ['name'] = 'Buccaneer Rider', + ['brand'] = 'Albany', + ['model'] = 'buccaneer2', + ['price'] = 24500, + ['category'] = 'muscle', + ['hash'] = `buccaneer2`, + ['shop'] = 'pdm', + }, + ['buffalo'] = { + ['name'] = 'Buffalo', + ['brand'] = 'Bravado', + ['model'] = 'buffalo', + ['price'] = 18750, + ['category'] = 'sports', + ['hash'] = `buffalo`, + ['shop'] = 'pdm', + }, + ['buffalo2'] = { + ['name'] = 'Buffalo S', + ['brand'] = 'Bravado', + ['model'] = 'buffalo2', + ['price'] = 24500, + ['category'] = 'sports', + ['hash'] = `buffalo2`, + ['shop'] = 'pdm', + }, + ['bullet'] = { + ['name'] = 'Bullet', + ['brand'] = 'Vapid', + ['model'] = 'bullet', + ['price'] = 120000, + ['category'] = 'super', + ['hash'] = `bullet`, + ['shop'] = 'pdm', + }, + ['burrito3'] = { + ['name'] = 'Burrito', + ['brand'] = 'Declasse', + ['model'] = 'burrito3', + ['price'] = 4000, + ['category'] = 'vans', + ['hash'] = `burrito3`, + ['shop'] = 'pdm', + }, + ['gburrito2'] = { + ['name'] = 'Burrito Custom', + ['brand'] = 'Declasse', + ['model'] = 'gburrito2', + ['price'] = 11500, + ['category'] = 'vans', + ['hash'] = `gburrito2`, + ['shop'] = 'pdm', + }, + ['carbonizzare'] = { + ['name'] = 'Carbonizzare', + ['brand'] = 'Grotti', + ['model'] = 'carbonizzare', + ['price'] = 155000, + ['category'] = 'sports', + ['hash'] = `carbonizzare`, + ['shop'] = 'pdm', + }, + ['carbonrs'] = { + ['name'] = 'Carbon RS', + ['brand'] = 'Nagasaki', + ['model'] = 'carbonrs', + ['price'] = 22000, + ['category'] = 'motorcycles', + ['hash'] = `carbonrs`, + ['shop'] = 'pdm', + }, + ['casco'] = { + ['name'] = 'Casco', + ['brand'] = 'Lampadati', + ['model'] = 'casco', + ['price'] = 100000, + ['category'] = 'sportsclassics', + ['hash'] = `casco`, + ['shop'] = 'pdm', + }, + ['cavalcade2'] = { + ['name'] = 'Cavalcade', + ['brand'] = 'Albany', + ['model'] = 'cavalcade2', + ['price'] = 16500, + ['category'] = 'suvs', + ['hash'] = `cavalcade2`, + ['shop'] = 'pdm', + }, + ['cheetah'] = { + ['name'] = 'Cheetah', + ['brand'] = 'Grotti', + ['model'] = 'cheetah', + ['price'] = 214000, + ['category'] = 'super', + ['hash'] = `cheetah`, + ['shop'] = 'pdm', + }, + ['cheetah2'] = { + ['name'] = 'Cheetah Classic', + ['brand'] = 'Grotti', + ['model'] = 'cheetah2', + ['price'] = 195000, + ['category'] = 'sports', + ['hash'] = `cheetah2`, + ['shop'] = 'pdm', + }, + ['chimera'] = { + ['name'] = 'Chimera', + ['brand'] = 'Nagasaki', + ['model'] = 'chimera', + ['price'] = 21000, + ['category'] = 'motorcycles', + ['hash'] = `chimera`, + ['shop'] = 'pdm', + }, + ['chino'] = { + ['name'] = 'Chino', + ['brand'] = 'Vapid', + ['model'] = 'chino', + ['price'] = 5000, + ['category'] = 'muscle', + ['hash'] = `chino`, + ['shop'] = 'pdm', + }, + ['chino2'] = { + ['name'] = 'Chino Luxe', + ['brand'] = 'Vapid', + ['model'] = 'chino2', + ['price'] = 8000, + ['category'] = 'muscle', + ['hash'] = `chino2`, + ['shop'] = 'pdm', + }, + ['cogcabrio'] = { + ['name'] = 'Cognoscenti Cabrio', + ['brand'] = 'Enus', + ['model'] = 'cogcabrio', + ['price'] = 30000, + ['category'] = 'coupes', + ['hash'] = `cogcabrio`, + ['shop'] = 'pdm', + }, + ['cognoscenti'] = { + ['name'] = 'Cognoscenti', + ['brand'] = 'Enus', + ['model'] = 'cognoscenti', + ['price'] = 22500, + ['category'] = 'sedans', + ['hash'] = `cognoscenti`, + ['shop'] = 'pdm', + }, + ['comet2'] = { + ['name'] = 'Comet', + ['brand'] = 'Pfister', + ['model'] = 'comet2', + ['price'] = 130000, + ['category'] = 'sports', + ['hash'] = `comet2`, + ['shop'] = 'pdm', + }, + ['comet3'] = { + ['name'] = 'Comet Retro Custom', + ['brand'] = 'Pfister', + ['model'] = 'comet3', + ['price'] = 175000, + ['category'] = 'sports', + ['hash'] = `comet3`, + ['shop'] = 'pdm', + }, + ['comet5'] = { + ['name'] = 'Comet SR', + ['brand'] = 'Pfister', + ['model'] = 'comet5', + ['price'] = 155000, + ['category'] = 'sports', + ['hash'] = `comet5`, + ['shop'] = 'pdm', + }, + ['coquette'] = { + ['name'] = 'Coquette', + ['brand'] = 'Invetero', + ['model'] = 'coquette', + ['price'] = 145000, + ['category'] = 'sports', + ['hash'] = `coquette`, + ['shop'] = 'pdm', + }, + ['coquette2'] = { + ['name'] = 'Coquette Classic', + ['brand'] = 'Invetero', + ['model'] = 'coquette2', + ['price'] = 165000, + ['category'] = 'sportsclassics', + ['hash'] = `coquette2`, + ['shop'] = 'pdm', + }, + ['coquette3'] = { + ['name'] = 'Coquette BlackFin', + ['brand'] = 'Invetero', + ['model'] = 'coquette3', + ['price'] = 180000, + ['category'] = 'muscle', + ['hash'] = `coquette3`, + ['shop'] = 'pdm', + }, + ['cyclone'] = { --might be too overpowered + ['name'] = 'Cyclone', + ['brand'] = 'Coil', + ['model'] = 'cyclone', + ['price'] = 300000, + ['category'] = 'super', + ['hash'] = `cyclone`, + ['shop'] = 'pdm', + }, + ['daemon'] = { + ['name'] = 'Daemon', + ['brand'] = 'WMC', + ['model'] = 'daemon', + ['price'] = 14000, + ['category'] = 'motorcycles', + ['hash'] = `daemon`, + ['shop'] = 'pdm', + }, + ['defiler'] = { + ['name'] = 'Defiler', + ['brand'] = 'Shitzu', + ['model'] = 'defiler', + ['price'] = 30000, + ['category'] = 'motorcycles', + ['hash'] = `defiler`, + ['shop'] = 'pdm', + }, + ['dilettante'] = { + ['name'] = 'Dilettante', + ['brand'] = 'Karin', + ['model'] = 'dilettante', + ['price'] = 9000, + ['category'] = 'compacts', + ['hash'] = `dilettante`, + ['shop'] = 'pdm', + }, + ['dominator'] = { + ['name'] = 'Dominator', + ['brand'] = 'Vapid', + ['model'] = 'dominator', + ['price'] = 62500, + ['category'] = 'muscle', + ['hash'] = `dominator`, + ['shop'] = 'pdm', + }, + ['dubsta2'] = { + ['name'] = 'Dubsta Luxuary', + ['brand'] = 'Benefactor', + ['model'] = 'dubsta2', + ['price'] = 19500, + ['category'] = 'suvs', + ['hash'] = `dubsta2`, + ['shop'] = 'pdm', + }, + ['dubsta3'] = { + ['name'] = 'Dubsta 6x6', + ['brand'] = 'Annis', + ['price'] = 34000, + ['category'] = 'offroad', + ['model'] = 'dubsta3', + ['hash'] = `dubsta3`, + ['shop'] = 'pdm', + }, + ['dukes'] = { + ['name'] = 'Dukes', + ['brand'] = 'Imponte', + ['model'] = 'dukes', + ['price'] = 23500, + ['category'] = 'muscle', + ['hash'] = `dukes`, + ['shop'] = 'pdm', + }, + ['dune'] = { + ['name'] = 'Dune Buggy', + ['brand'] = 'Annis', + ['price'] = 14000, + ['category'] = 'offroad', + ['model'] = 'dune', + ['hash'] = `dune`, + ['shop'] = 'pdm', + }, + ['elegy'] = { + ['name'] = 'Elegy Retro Custom', + ['brand'] = 'Annis', + ['model'] = 'elegy', + ['price'] = 145000, + ['category'] = 'sports', + ['hash'] = `elegy`, + ['shop'] = 'pdm', + }, + ['elegy2'] = { + ['name'] = 'Elegy RH8', + ['brand'] = 'Annis', + ['model'] = 'elegy2', + ['price'] = 150000, + ['category'] = 'sports', + ['hash'] = `elegy2`, + ['shop'] = 'pdm', + }, + ['ellie'] = { + ['name'] = 'Ellie', + ['brand'] = 'Vapid', + ['model'] = 'ellie', + ['price'] = 42250, + ['category'] = 'muscle', + ['hash'] = `ellie`, + ['shop'] = 'pdm', + }, + ['emperor'] = { + ['name'] = 'Emperor', + ['brand'] = 'Albany', + ['model'] = 'emperor', + ['price'] = 4250, + ['category'] = 'sedans', + ['hash'] = `emperor`, + ['shop'] = 'pdm', + }, + ['entity2'] = { + ['name'] = 'Entity XXR', + ['brand'] = 'Överflöd', + ['model'] = 'entity2', + ['price'] = 164000, + ['category'] = 'super', + ['hash'] = `entity2`, + ['shop'] = 'pdm', + }, + ['entityxf'] = { + ['name'] = 'Entity XF', + ['brand'] = 'Överflöd', + ['model'] = 'entityxf', + ['price'] = 180000, + ['category'] = 'super', + ['hash'] = `entityxf`, + ['shop'] = 'pdm', + }, + ['esskey'] = { + ['name'] = 'Esskey', + ['brand'] = 'Pegassi', + ['model'] = 'esskey', + ['price'] = 12000, + ['category'] = 'motorcycles', + ['hash'] = `esskey`, + ['shop'] = 'pdm', + }, + ['exemplar'] = { + ['name'] = 'Exemplar', + ['brand'] = 'Dewbauchee', + ['model'] = 'exemplar', + ['price'] = 40000, + ['category'] = 'coupes', + ['hash'] = `exemplar`, + ['shop'] = 'pdm', + }, + ['f620'] = { + ['name'] = 'F620', + ['brand'] = 'Ocelot', + ['model'] = 'f620', + ['price'] = 32500, + ['category'] = 'coupes', + ['hash'] = `f620`, + ['shop'] = 'pdm', + }, + ['faction'] = { + ['name'] = 'Faction', + ['brand'] = 'Willard', + ['model'] = 'faction', + ['price'] = 17000, + ['category'] = 'muscle', + ['hash'] = `faction`, + ['shop'] = 'pdm', + }, + ['faction2'] = { + ['name'] = 'Faction Rider', + ['brand'] = 'Willard', + ['model'] = 'faction2', + ['price'] = 19000, + ['category'] = 'muscle', + ['hash'] = `faction2`, + ['shop'] = 'pdm', + }, + ['fagaloa'] = { + ['name'] = 'Fagaloa', + ['brand'] = 'Vulcar', + ['model'] = 'fagaloa', + ['price'] = 13000, + ['category'] = 'sportsclassics', + ['hash'] = `fagaloa`, + ['shop'] = 'pdm', + }, + ['faggio'] = { + ['name'] = 'Faggio Sport', + ['brand'] = 'Pegassi', + ['model'] = 'faggio', + ['price'] = 2000, + ['category'] = 'motorcycles', + ['hash'] = `faggio`, + ['shop'] = 'pdm', + }, + ['faggio3'] = { + ['name'] = 'Faggio Mod', + ['brand'] = 'Pegassi', + ['model'] = 'faggio3', + ['price'] = 2500, + ['category'] = 'motorcycles', + ['hash'] = `faggio3`, + ['shop'] = 'pdm', + }, + ['felon'] = { + ['name'] = 'Felon', + ['brand'] = 'Lampadati', + ['model'] = 'felon', + ['price'] = 31000, + ['category'] = 'coupes', + ['hash'] = `felon`, + ['shop'] = 'pdm', + }, + ['felon2'] = { + ['name'] = 'Felon GT', + ['brand'] = 'Lampadati', + ['model'] = 'felon2', + ['price'] = 37000, + ['category'] = 'coupes', + ['hash'] = `felon2`, + ['shop'] = 'pdm', + }, + ['feltzer2'] = { + ['name'] = 'Feltzer', + ['brand'] = 'Benefactor', + ['model'] = 'feltzer2', + ['price'] = 97000, + ['category'] = 'sports', + ['hash'] = `feltzer2`, + ['shop'] = 'pdm', + }, + ['feltzer3'] = { + ['name'] = 'Stirling GT', + ['brand'] = 'Benefactor', + ['model'] = 'feltzer3', + ['price'] = 115000, + ['category'] = 'sportsclassics', + ['hash'] = `feltzer3`, + ['shop'] = 'pdm', + }, + ['flashgt'] = { + ['name'] = 'Flash GT', + ['brand'] = 'Vapid', + ['model'] = 'flashgt', + ['price'] = 48000, + ['category'] = 'sports', + ['hash'] = `flashgt`, + ['shop'] = 'pdm', + }, + ['fmj'] = { + ['name'] = 'FMJ', + ['brand'] = 'Vapid', + ['model'] = 'fmj', + ['price'] = 125000, + ['category'] = 'super', + ['hash'] = `fmj`, + ['shop'] = 'pdm', + }, + ['fq2'] = { + ['name'] = 'FQ2', + ['brand'] = 'Fathom', + ['model'] = 'fq2', + ['price'] = 18500, + ['category'] = 'suvs', + ['hash'] = `fq2`, + ['shop'] = 'pdm', + }, + ['fugitive'] = { + ['name'] = 'Fugitive', + ['brand'] = 'Cheval', + ['model'] = 'fugitive', + ['price'] = 20000, + ['category'] = 'sedans', + ['hash'] = `fugitive`, + ['shop'] = 'pdm', + }, + ['furoregt'] = { + ['name'] = 'Furore GT', + ['brand'] = 'Lampadati', + ['model'] = 'furoregt', + ['price'] = 78000, + ['category'] = 'sports', + ['hash'] = `furoregt`, + ['shop'] = 'pdm', + }, + ['futo'] = { + ['name'] = 'Futo', + ['brand'] = 'Karin', + ['model'] = 'futo', + ['price'] = 17500, + ['category'] = 'coupes', + ['hash'] = `futo`, + ['shop'] = 'pdm', + }, + ['gauntlet'] = { + ['name'] = 'Gauntlet', + ['brand'] = 'Bravado', + ['model'] = 'gauntlet', + ['price'] = 28500, + ['category'] = 'muscle', + ['hash'] = `gauntlet`, + ['shop'] = 'pdm', + }, + ['glendale'] = { + ['name'] = 'Glendale', + ['brand'] = 'Benefactor', + ['model'] = 'glendale', + ['price'] = 3400, + ['category'] = 'sedans', + ['hash'] = `glendale`, + ['shop'] = 'pdm', + }, + ['gp1'] = { + ['name'] = 'GP1', + ['brand'] = 'Progen', + ['model'] = 'gp1', + ['price'] = 110000, + ['category'] = 'super', + ['hash'] = `gp1`, + ['shop'] = 'pdm', + }, + ['granger'] = { + ['name'] = 'Granger', + ['brand'] = 'Declasse', + ['model'] = 'granger', + ['price'] = 22000, + ['category'] = 'suvs', + ['hash'] = `granger`, + ['shop'] = 'pdm', + }, + ['gresley'] = { + ['name'] = 'Gresley', + ['brand'] = 'Bravado', + ['model'] = 'gresley', + ['price'] = 25000, + ['category'] = 'suvs', + ['hash'] = `gresley`, + ['shop'] = 'pdm', + }, + ['gt500'] = { + ['name'] = 'GT500', + ['brand'] = 'Grotti', + ['model'] = 'gt500', + ['price'] = 130000, + ['category'] = 'sportsclassics', + ['hash'] = `gt500`, + ['shop'] = 'pdm', + }, + ['guardian'] = { + ['name'] = 'Guardian', + ['brand'] = 'Annis', + ['price'] = 21000, + ['category'] = 'offroad', + ['model'] = 'guardian', + ['hash'] = `guardian`, + ['shop'] = 'pdm', + }, + ['hakuchou'] = { + ['name'] = 'Hakuchou', + ['brand'] = 'Shitzu', + ['model'] = 'hakuchou', + ['price'] = 17000, + ['category'] = 'motorcycles', + ['hash'] = `hakuchou`, + ['shop'] = 'pdm', + }, + ['hexer'] = { + ['name'] = 'Hexer', + ['brand'] = 'LCC', + ['model'] = 'hexer', + ['price'] = 16000, + ['category'] = 'motorcycles', + ['hash'] = `hexer`, + ['shop'] = 'pdm', + }, + ['hotknife'] = { + ['name'] = 'Hotknife', + ['brand'] = 'Vapid', + ['model'] = 'hotknife', + ['price'] = 90000, + ['category'] = 'muscle', + ['hash'] = `hotknife`, + ['shop'] = 'pdm', + }, + ['huntley'] = { + ['name'] = 'Huntley S', + ['brand'] = 'Enus', + ['model'] = 'huntley', + ['price'] = 24500, + ['category'] = 'suvs', + ['hash'] = `huntley`, + ['shop'] = 'pdm', + }, + ['hustler'] = { + ['name'] = 'Hustler', + ['brand'] = 'Vapid', + ['model'] = 'hustler', + ['price'] = 95000, + ['category'] = 'muscle', + ['hash'] = `hustler`, + ['shop'] = 'pdm', + }, + ['infernus'] = { + ['name'] = 'Infernus', + ['brand'] = 'Pegassi', + ['model'] = 'infernus', + ['price'] = 235000, + ['category'] = 'super', + ['hash'] = `infernus`, + ['shop'] = 'pdm', + }, + ['infernus2'] = { + ['name'] = 'Infernus Classic', + ['brand'] = 'Pegassi', + ['model'] = 'infernus2', + ['price'] = 245000, + ['category'] = 'sportsclassics', + ['hash'] = `infernus2`, + ['shop'] = 'pdm', + }, + ['intruder'] = { + ['name'] = 'Intruder', + ['brand'] = 'Karin', + ['model'] = 'intruder', + ['price'] = 11250, + ['category'] = 'sedans', + ['hash'] = `intruder`, + ['shop'] = 'pdm', + }, + ['issi2'] = { + ['name'] = 'Issi', + ['brand'] = 'Weeny', + ['model'] = 'issi2', + ['price'] = 7000, + ['category'] = 'compacts', + ['hash'] = `issi2`, + ['shop'] = 'pdm', + }, + ['issi3'] = { + ['name'] = 'Issi Classic', + ['brand'] = 'Weeny', + ['model'] = 'issi3', + ['price'] = 5000, + ['category'] = 'compacts', + ['hash'] = `issi3`, + ['shop'] = 'pdm', + }, + ['italigtb'] = { + ['name'] = 'Itali GTB', + ['brand'] = 'Progen', + ['model'] = 'italigtb', + ['price'] = 170000, + ['category'] = 'super', + ['hash'] = `italigtb`, + ['shop'] = 'pdm', + }, + ['jackal'] = { + ['name'] = 'Jackal', + ['brand'] = 'Ocelot', + ['model'] = 'jackal', + ['price'] = 19000, + ['category'] = 'coupes', + ['hash'] = `jackal`, + ['shop'] = 'pdm', + }, + ['jester'] = { + ['name'] = 'Jester', + ['brand'] = 'Dinka', + ['model'] = 'jester', + ['price'] = 132250, + ['category'] = 'sports', + ['hash'] = `jester`, + ['shop'] = 'pdm', + }, + ['jester3'] = { + ['name'] = 'Jester Classic', + ['brand'] = 'Dinka', + ['model'] = 'jester3', + ['price'] = 85000, + ['category'] = 'sports', + ['hash'] = `jester3`, + ['shop'] = 'pdm', + }, + ['khamelion'] = { + ['name'] = 'Khamelion', + ['brand'] = 'Hijak', + ['model'] = 'khamelion', + ['price'] = 90000, + ['category'] = 'sports', + ['hash'] = `khamelion`, + ['shop'] = 'pdm', + }, + ['kuruma'] = { + ['name'] = 'Kuruma', + ['brand'] = 'Karin', + ['model'] = 'kuruma', + ['price'] = 72000, + ['category'] = 'sports', + ['hash'] = `kuruma`, + ['shop'] = 'pdm', + }, + ['landstalker'] = { + ['name'] = 'Landstalker', + ['brand'] = 'Dundreary', + ['model'] = 'landstalker', + ['price'] = 12000, + ['category'] = 'suvs', + ['hash'] = `landstalker`, + ['shop'] = 'pdm', + }, + ['lynx'] = { + ['name'] = 'Lynx', + ['brand'] = 'Ocelot', + ['model'] = 'lynx', + ['price'] = 150000, + ['category'] = 'sports', + ['hash'] = `lynx`, + ['shop'] = 'pdm', + }, + ['mamba'] = { + ['name'] = 'Mamba', + ['brand'] = 'Declasse', + ['model'] = 'mamba', + ['price'] = 140000, + ['category'] = 'sportsclassics', + ['hash'] = `mamba`, + ['shop'] = 'pdm', + }, + ['massacro'] = { + ['name'] = 'Massacro', + ['brand'] = 'Dewbauchee', + ['model'] = 'massacro', + ['price'] = 110000, + ['category'] = 'sports', + ['hash'] = `massacro`, + ['shop'] = 'pdm', + }, + ['monroe'] = { + ['name'] = 'Monroe', + ['brand'] = 'Pegassi', + ['model'] = 'monroe', + ['price'] = 115000, + ['category'] = 'sportsclassics', + ['hash'] = `monroe`, + ['shop'] = 'pdm', + }, + ['moonbeam'] = { + ['name'] = 'Moonbeam', + ['brand'] = 'Declasse', + ['model'] = 'moonbeam', + ['price'] = 13000, + ['category'] = 'vans', + ['hash'] = `moonbeam`, + ['shop'] = 'pdm', + }, + ['nemesis'] = { + ['name'] = 'Nemesis', + ['brand'] = 'Principe', + ['model'] = 'nemesis', + ['price'] = 20000, + ['category'] = 'motorcycles', + ['hash'] = `nemesis`, + ['shop'] = 'pdm', + }, + ['neon'] = { + ['name'] = 'Neon', + ['brand'] = 'Pfister', + ['model'] = 'neon', + ['price'] = 220000, + ['category'] = 'sports', + ['hash'] = `neon`, + ['shop'] = 'pdm', + }, + ['nero'] = { + ['name'] = 'Nero', + ['brand'] = 'Truffade', + ['model'] = 'nero', + ['price'] = 200000, + ['category'] = 'super', + ['hash'] = `nero`, + ['shop'] = 'pdm', + }, + ['nightblade'] = { + ['name'] = 'Nightblade', + ['brand'] = 'WMC', + ['model'] = 'nightblade', + ['price'] = 23000, + ['category'] = 'motorcycles', + ['hash'] = `nightblade`, + ['shop'] = 'pdm', + }, + ['nightshade'] = { + ['name'] = 'Nightshade', + ['brand'] = 'Imponte', + ['model'] = 'nightshade', + ['price'] = 70000, + ['category'] = 'muscle', + ['hash'] = `nightshade`, + ['shop'] = 'pdm', + }, + ['ninef'] = { + ['name'] = '9F', + ['brand'] = 'Obey', + ['model'] = 'ninef', + ['price'] = 95000, + ['category'] = 'sports', + ['hash'] = `ninef`, + ['shop'] = 'pdm', + }, + ['ninef2'] = { + ['name'] = '9F Cabrio', + ['brand'] = 'Obey', + ['model'] = 'ninef2', + ['price'] = 105000, + ['category'] = 'sports', + ['hash'] = `ninef2`, + ['shop'] = 'pdm', + }, + ['omnis'] = { + ['name'] = 'Omnis', + ['brand'] = 'Wow', + ['model'] = 'omnis', + ['price'] = 90000, + ['category'] = 'sports', + ['hash'] = `omnis`, + ['shop'] = 'pdm', + }, + ['oracle'] = { + ['name'] = 'Oracle', + ['brand'] = 'Ubermacht', + ['model'] = 'oracle', + ['price'] = 22000, + ['category'] = 'sedans', + ['hash'] = `oracle`, + ['shop'] = 'pdm', + }, + ['oracle2'] = { + ['name'] = 'Oracle XS', + ['brand'] = 'Übermacht', + ['model'] = 'oracle2', + ['price'] = 28000, + ['category'] = 'coupes', + ['hash'] = `oracle2`, + ['shop'] = 'pdm', + }, + ['osiris'] = { + ['name'] = 'Osiris', + ['brand'] = 'Pegassi', + ['model'] = 'osiris', + ['price'] = 220000, + ['category'] = 'super', + ['hash'] = `osiris`, + ['shop'] = 'pdm', + }, + ['panto'] = { + ['name'] = 'Panto', + ['brand'] = 'Benefactor', + ['model'] = 'panto', + ['price'] = 3200, + ['category'] = 'compacts', + ['hash'] = `panto`, + ['shop'] = 'pdm', + }, + ['pariah'] = { + ['name'] = 'Pariah', + ['brand'] = 'Ocelot', + ['model'] = 'pariah', + ['price'] = 90000, + ['category'] = 'sports', + ['hash'] = `pariah`, + ['shop'] = 'pdm', + }, + ['patriot'] = { + ['name'] = 'Patriot', + ['brand'] = 'Mammoth', + ['model'] = 'patriot', + ['price'] = 21000, + ['category'] = 'suvs', + ['hash'] = `patriot`, + ['shop'] = 'pdm', + }, + ['pcj'] = { + ['name'] = 'PCJ-600', + ['brand'] = 'Shitzu', + ['model'] = 'pcj', + ['price'] = 15000, + ['category'] = 'motorcycles', + ['hash'] = `pcj`, + ['shop'] = 'pdm', + }, + ['penetrator'] = { + ['name'] = 'Penetrator', + ['brand'] = 'Ocelot', + ['model'] = 'penetrator', + ['price'] = 130000, + ['category'] = 'super', + ['hash'] = `penetrator`, + ['shop'] = 'pdm', + }, + ['pfister811'] = { + ['name'] = '811', + ['brand'] = 'Pfister', + ['model'] = 'pfister811', + ['price'] = 220000, + ['category'] = 'super', + ['hash'] = `pfister811`, + ['shop'] = 'pdm', + }, + ['phoenix'] = { + ['name'] = 'Phoenix', + ['brand'] = 'Imponte', + ['model'] = 'phoenix', + ['price'] = 65000, + ['category'] = 'muscle', + ['hash'] = `phoenix`, + ['shop'] = 'pdm', + }, + ['picador'] = { + ['name'] = 'Picador', + ['brand'] = 'Cheval', + ['model'] = 'picador', + ['price'] = 20000, + ['category'] = 'muscle', + ['hash'] = `picador`, + ['shop'] = 'pdm', + }, + ['pigalle'] = { + ['name'] = 'Pigalle', + ['brand'] = 'Lampadati', + ['model'] = 'pigalle', + ['price'] = 92000, + ['category'] = 'sportsclassics', + ['hash'] = `pigalle`, + ['shop'] = 'pdm', + }, + ['prairie'] = { + ['name'] = 'Prairie', + ['brand'] = 'Bollokan', + ['model'] = 'prairie', + ['price'] = 30000, + ['category'] = 'compacts', + ['hash'] = `prairie`, + ['shop'] = 'pdm', + }, + ['premier'] = { + ['name'] = 'Premier', + ['brand'] = 'Declasse', + ['model'] = 'premier', + ['price'] = 12000, + ['category'] = 'sedans', + ['hash'] = `premier`, + ['shop'] = 'pdm', + }, + ['primo2'] = { + ['name'] = 'Primo Custom', + ['brand'] = 'Albany', + ['model'] = 'primo2', + ['price'] = 14500, + ['category'] = 'sedans', + ['hash'] = `primo2`, + ['shop'] = 'pdm', + }, + ['prototipo'] = { + ['name'] = 'X80 Proto', + ['brand'] = 'Grotti', + ['model'] = 'prototipo', + ['price'] = 235000, + ['category'] = 'super', + ['hash'] = `prototipo`, + ['shop'] = 'pdm', + }, + ['radi'] = { + ['name'] = 'Radius', + ['brand'] = 'Vapid', + ['model'] = 'radi', + ['price'] = 18000, + ['category'] = 'suvs', + ['hash'] = `radi`, + ['shop'] = 'pdm', + }, + ['rapidgt'] = { + ['name'] = 'Rapid GT', + ['brand'] = 'Dewbauchee', + ['model'] = 'rapidgt', + ['price'] = 86000, + ['category'] = 'sports', + ['hash'] = `rapidgt`, + ['shop'] = 'pdm', + }, + ['rapidgt2'] = { + ['name'] = 'Rapid GT Convertible', + ['brand'] = 'Dewbauchee', + ['model'] = 'rapidgt2', + ['price'] = 92000, + ['category'] = 'sports', + ['hash'] = `rapidgt2`, + ['shop'] = 'pdm', + }, + ['rapidgt3'] = { + ['name'] = 'Rapid GT', + ['brand'] = 'Dewbauchee', + ['model'] = 'rapidgt3', + ['price'] = 90000, + ['category'] = 'sportsclassics', + ['hash'] = `rapidgt3`, + ['shop'] = 'pdm', + }, + ['reaper'] = { + ['name'] = 'Reaper', + ['brand'] = 'Pegassi', + ['model'] = 'reaper', + ['price'] = 100000, + ['category'] = 'super', + ['hash'] = `reaper`, + ['shop'] = 'pdm', + }, + ['rebel2'] = { + ['name'] = 'Rebel', + ['brand'] = 'Annis', + ['model'] = 'rebel2', + ['price'] = 20000, + ['category'] = 'offroad', + ['hash'] = `rebel2`, + ['shop'] = 'pdm', + }, + ['regina'] = { + ['name'] = 'Regina', + ['brand'] = 'Dundreary', + ['model'] = 'regina', + ['price'] = 7000, + ['category'] = 'sedans', + ['hash'] = `regina`, + ['shop'] = 'pdm', + }, + ['revolter'] = { + ['name'] = 'Revolter', + ['brand'] = 'Ubermacht', + ['model'] = 'revolter', + ['price'] = 95000, + ['category'] = 'sports', + ['hash'] = `revolter`, + ['shop'] = 'pdm', + }, + ['rhapsody'] = { + ['name'] = 'Rhapsody', + ['brand'] = 'Declasse', + ['model'] = 'rhapsody', + ['price'] = 10000, + ['category'] = 'compacts', + ['hash'] = `rhapsody`, + ['shop'] = 'pdm', + }, + ['rocoto'] = { + ['name'] = 'Rocoto', + ['brand'] = 'Obey', + ['model'] = 'rocoto', + ['price'] = 13000, + ['category'] = 'suvs', + ['hash'] = `rocoto`, + ['shop'] = 'pdm', + }, + ['ruffian'] = { + ['name'] = 'Ruffian', + ['brand'] = 'Pegassi', + ['model'] = 'ruffian', + ['price'] = 25000, + ['category'] = 'motorcycles', + ['hash'] = `ruffian`, + ['shop'] = 'pdm', + }, + ['rumpo'] = { + ['name'] = 'Rumpo', + ['brand'] = 'Bravado', + ['model'] = 'rumpo', + ['price'] = 9000, + ['category'] = 'vans', + ['hash'] = `rumpo`, + ['shop'] = 'pdm', + }, + ['ruston'] = { + ['name'] = 'Ruston', + ['brand'] = 'Hijak', + ['model'] = 'ruston', + ['price'] = 130000, + ['category'] = 'sports', + ['hash'] = `ruston`, + ['shop'] = 'pdm', + }, + ['sabregt'] = { + ['name'] = 'Sabre Turbo', + ['brand'] = 'Declasse', + ['model'] = 'sabregt', + ['price'] = 23000, + ['category'] = 'muscle', + ['hash'] = `sabregt`, + ['shop'] = 'pdm', + }, + ['sabregt2'] = { + ['name'] = 'Sabre GT', + ['brand'] = 'Declasse', + ['model'] = 'sabregt2', + ['price'] = 26500, + ['category'] = 'muscle', + ['hash'] = `sabregt2`, + ['shop'] = 'pdm', + }, + ['sandking'] = { + ['name'] = 'Sandking', + ['brand'] = 'Annis', + ['price'] = 25000, + ['category'] = 'offroad', + ['model'] = 'sandking', + ['hash'] = `sandking`, + ['shop'] = 'pdm', + }, + ['sc1'] = { + ['name'] = 'SC1', + ['brand'] = 'Übermacht', + ['model'] = 'sc1', + ['price'] = 90000, + ['category'] = 'super', + ['hash'] = `sc1`, + ['shop'] = 'pdm', + }, + ['schafter2'] = { + ['name'] = 'Schafter', + ['brand'] = 'Benefactor', + ['model'] = 'schafter2', + ['price'] = 16000, + ['category'] = 'sedans', + ['hash'] = `schafter2`, + ['shop'] = 'pdm', + }, + ['schafter3'] = { + ['name'] = 'Schafter V12', + ['brand'] = 'Benefactor', + ['model'] = 'schafter3', + ['price'] = 35000, + ['category'] = 'sports', + ['hash'] = `schafter3`, + ['shop'] = 'pdm', + }, + ['seminole'] = { + ['name'] = 'Seminole', + ['brand'] = 'Canis', + ['model'] = 'seminole', + ['price'] = 20000, + ['category'] = 'suvs', + ['hash'] = `seminole`, + ['shop'] = 'pdm', + }, + ['sentinel'] = { + ['name'] = 'Sentinel', + ['brand'] = 'Übermacht', + ['model'] = 'sentinel', + ['price'] = 30000, + ['category'] = 'coupes', + ['hash'] = `sentinel`, + ['shop'] = 'pdm', + }, + ['sentinel2'] = { + ['name'] = 'Sentinel XS', + ['brand'] = ' Übermacht', + ['model'] = 'sentinel2', + ['price'] = 33000, + ['category'] = 'coupes', + ['hash'] = `sentinel2`, + ['shop'] = 'pdm', + }, + ['sentinel3'] = { + ['name'] = 'Sentinel Classic', + ['brand'] = 'Übermacht', + ['model'] = 'sentinel3', + ['price'] = 70000, + ['category'] = 'coupes', + ['hash'] = `sentinel3`, + ['shop'] = 'pdm', + }, + ['seven70'] = { + ['name'] = 'Seven-70', + ['brand'] = 'Dewbauchee', + ['model'] = 'seven70', + ['price'] = 140000, + ['category'] = 'sports', + ['hash'] = `seven70`, + ['shop'] = 'pdm', + }, + ['slamvan3'] = { + ['name'] = 'Slam Van Custom', + ['brand'] = 'Vapid', + ['model'] = 'slamvan3', + ['price'] = 17000, + ['category'] = 'muscle', + ['hash'] = `slamvan3`, + ['shop'] = 'pdm', + }, + ['sovereign'] = { + ['name'] = 'Sovereign', + ['brand'] = 'WMC', + ['model'] = 'sovereign', + ['price'] = 8000, + ['category'] = 'motorcycles', + ['hash'] = `sovereign`, + ['shop'] = 'pdm', + }, + ['specter'] = { + ['name'] = 'Specter', + ['brand'] = 'Dewbauchee', + ['model'] = 'specter', + ['price'] = 160000, + ['category'] = 'sports', + ['hash'] = `specter`, + ['shop'] = 'pdm', + }, + ['stafford'] = { + ['name'] = 'Stafford', + ['brand'] = 'Enus', + ['model'] = 'stafford', + ['price'] = 30000, + ['category'] = 'sedans', + ['hash'] = `stafford`, + ['shop'] = 'pdm', + }, + ['stalion'] = { + ['name'] = 'Stallion', + ['brand'] = 'Declasse', + ['model'] = 'stalion', + ['price'] = 33000, + ['category'] = 'muscle', + ['hash'] = `stalion`, + ['shop'] = 'pdm', + }, + ['stingergt'] = { + ['name'] = 'Stinger GT', + ['brand'] = 'Grotti', + ['model'] = 'stingergt', + ['price'] = 70000, + ['category'] = 'sportsclassics', + ['hash'] = `stingergt`, + ['shop'] = 'pdm', + }, + ['streiter'] = { + ['name'] = 'Streiter', + ['brand'] = 'Benefactor', + ['model'] = 'streiter', + ['price'] = 40000, + ['category'] = 'sports', + ['hash'] = `streiter`, + ['shop'] = 'pdm', + }, + ['sultan'] = { + ['name'] = 'Sultan', + ['brand'] = 'Karin', + ['model'] = 'sultan', + ['price'] = 50000, + ['category'] = 'sports', + ['hash'] = `sultan`, + ['shop'] = 'pdm', + }, + ['sultanrs'] = { + ['name'] = 'Sultan RS', + ['brand'] = 'Karin', + ['model'] = 'sultanrs', + ['price'] = 76500, + ['category'] = 'sports', + ['hash'] = `sultanrs`, + ['shop'] = 'pdm', + }, + ['superd'] = { + ['name'] = 'Super Diamond', + ['brand'] = 'Enus', + ['model'] = 'superd', + ['price'] = 17000, + ['category'] = 'sedans', + ['hash'] = `superd`, + ['shop'] = 'pdm', + }, + ['surano'] = { + ['name'] = 'Surano', + ['brand'] = ' Benefactor', + ['model'] = 'surano', + ['price'] = 80000, + ['category'] = 'sports', + ['hash'] = `surano`, + ['shop'] = 'pdm', + }, + ['surge'] = { + ['name'] = 'Surge', + ['brand'] = 'Cheval', + ['model'] = 'surge', + ['price'] = 20000, + ['category'] = 'sedans', + ['hash'] = `surge`, + ['shop'] = 'pdm', + }, + ['t20'] = { + ['name'] = 'T20', + ['brand'] = 'Progen', + ['model'] = 't20', + ['price'] = 1650000, + ['category'] = 'super', + ['hash'] = `t20`, + ['shop'] = 'pdm', + }, + ['tailgater'] = { + ['name'] = 'Tailgater', + ['brand'] = 'Obey', + ['model'] = 'tailgater', + ['price'] = 22000, + ['category'] = 'sedans', + ['hash'] = `tailgater`, + ['shop'] = 'pdm', + }, + ['taipan'] = { + ['name'] = 'Taipan', + ['brand'] = 'Cheval', + ['model'] = 'taipan', + ['price'] = 1850000, + ['category'] = 'super', + ['hash'] = `taipan`, + ['shop'] = 'pdm', + }, + ['tampa'] = { + ['name'] = 'Tampa', + ['brand'] = 'Declasse', + ['model'] = 'tampa', + ['price'] = 24500, + ['category'] = 'muscle', + ['hash'] = `tampa`, + ['shop'] = 'pdm', + }, + ['tampa2'] = { + ['name'] = 'Drift Tampa', + ['brand'] = 'Declasse', + ['model'] = 'tampa2', + ['price'] = 80000, + ['category'] = 'muscle', + ['hash'] = `tampa2`, + ['shop'] = 'pdm', + }, + ['tempesta'] = { + ['name'] = 'Tempesta', + ['brand'] = 'Pegassi', + ['model'] = 'tempesta', + ['price'] = 120000, + ['category'] = 'super', + ['hash'] = `tempesta`, + ['shop'] = 'pdm', + }, + ['tezeract'] = { + ['name'] = 'Tezeract', + ['brand'] = 'Pegassi', + ['model'] = 'tezeract', + ['price'] = 220000, + ['category'] = 'super', + ['hash'] = `tezeract`, + ['shop'] = 'pdm', + }, + ['thrust'] = { + ['name'] = 'Thrust', + ['brand'] = 'Dinka', + ['model'] = 'thrust', + ['price'] = 22000, + ['category'] = 'motorcycles', + ['hash'] = `thrust`, + ['shop'] = 'pdm', + }, + ['torero'] = { + ['name'] = 'Torero', + ['brand'] = 'Pegassi', + ['model'] = 'torero', + ['price'] = 84000, + ['category'] = 'sportsclassics', + ['hash'] = `torero`, + ['shop'] = 'pdm', + }, + ['trophytruck'] = { + ['name'] = 'Trophy Truck', + ['brand'] = 'Annis', + ['price'] = 60000, + ['category'] = 'offroad', + ['model'] = 'trophytruck', + ['hash'] = `trophytruck`, + ['shop'] = 'pdm', + }, + ['trophytruck2'] = { + ['name'] = 'Trophy Truck Limited', + ['brand'] = 'Annis', + ['price'] = 80000, + ['category'] = 'offroad', + ['model'] = 'trophytruck2', + ['hash'] = `trophytruck2`, + ['shop'] = 'pdm', + }, + ['turismor'] = { + ['name'] = 'Turismo R', + ['brand'] = 'Grotti', + ['model'] = 'turismor', + ['price'] = 140000, + ['category'] = 'super', + ['hash'] = `turismor`, + ['shop'] = 'pdm', + }, + ['tyrant'] = { + ['name'] = 'Tyrant', + ['brand'] = ' Överflöd', + ['model'] = 'tyrant', + ['price'] = 2100000, + ['category'] = 'super', + ['hash'] = `tyrant`, + ['shop'] = 'pdm', + }, + ['vacca'] = { + ['name'] = 'Vacca', + ['brand'] = 'Pegassi', + ['model'] = 'vacca', + ['price'] = 105000, + ['category'] = 'super', + ['hash'] = `vacca`, + ['shop'] = 'pdm', + }, + ['vagner'] = { + ['name'] = 'Vagner', + ['brand'] = 'Dewbauchee', + ['model'] = 'vagner', + ['price'] = 1660000, + ['category'] = 'super', + ['hash'] = `vagner`, + ['shop'] = 'pdm', + }, + ['verlierer2'] = { + ['name'] = 'Verlierer', + ['brand'] = 'Bravado', + ['model'] = 'verlierer2', + ['price'] = 90500, + ['category'] = 'sports', + ['hash'] = `verlierer2`, + ['shop'] = 'pdm', + }, + ['vigero'] = { + ['name'] = 'Vigero', + ['brand'] = 'Declasse', + ['model'] = 'vigero', + ['price'] = 39500, + ['category'] = 'muscle', + ['hash'] = `vigero`, + ['shop'] = 'pdm', + }, + ['virgo'] = { + ['name'] = 'Virgo', + ['brand'] = 'Albany', + ['model'] = 'virgo', + ['price'] = 22000, + ['category'] = 'muscle', + ['hash'] = `virgo`, + ['shop'] = 'pdm', + }, + ['visione'] = { + ['name'] = 'Visione', + ['brand'] = 'Grotti', + ['model'] = 'visione', + ['price'] = 750000, + ['category'] = 'sports', + ['hash'] = `visione`, + ['shop'] = 'pdm', + }, + ['voltic'] = { + ['name'] = 'Voltic', + ['brand'] = 'Coil', + ['model'] = 'voltic', + ['price'] = 120000, + ['category'] = 'super', + ['hash'] = `voltic`, + ['shop'] = 'pdm', + }, + ['voodoo'] = { + ['name'] = 'Voodoo', + ['brand'] = 'Declasse', + ['model'] = 'voodoo', + ['price'] = 13000, + ['category'] = 'muscle', + ['hash'] = `voodoo`, + ['shop'] = 'pdm', + }, + ['washington'] = { + ['name'] = 'Washington', + ['brand'] = 'Albany', + ['model'] = 'washington', + ['price'] = 7000, + ['category'] = 'sedans', + ['hash'] = `washington`, + ['shop'] = 'pdm', + }, + ['windsor'] = { + ['name'] = 'Windsor', + ['brand'] = 'Enus', + ['model'] = 'windsor', + ['price'] = 27000, + ['category'] = 'coupes', + ['hash'] = `windsor`, + ['shop'] = 'pdm', + }, + ['windsor2'] = { + ['name'] = 'Windsor Drop', + ['brand'] = 'Enus', + ['model'] = 'windsor2', + ['price'] = 34000, + ['category'] = 'coupes', + ['hash'] = `windsor2`, + ['shop'] = 'pdm', + }, + ['xa21'] = { + ['name'] = 'XA-21', + ['brand'] = 'Ocelot', + ['model'] = 'xa21', + ['price'] = 180000, + ['category'] = 'super', + ['hash'] = `xa21`, + ['shop'] = 'pdm', + }, + ['xls'] = { + ['name'] = 'XLS', + ['brand'] = 'Benefactor', + ['model'] = 'xls', + ['price'] = 17000, + ['category'] = 'suvs', + ['hash'] = `xls`, + ['shop'] = 'pdm', + }, + ['yosemite'] = { + ['name'] = 'Yosemite', + ['brand'] = 'Declasse', + ['model'] = 'yosemite', + ['price'] = 19500, + ['category'] = 'muscle', + ['hash'] = `yosemite`, + ['shop'] = 'pdm', + }, + ['z190'] = { + ['name'] = '190Z', + ['brand'] = 'Karin', + ['model'] = 'z190', + ['price'] = 78000, + ['category'] = 'sportsclassics', + ['hash'] = `z190`, + ['shop'] = 'pdm', + }, + ['zentorno'] = { + ['name'] = 'Zentorno', + ['brand'] = 'Pegassi', + ['model'] = 'zentorno', + ['price'] = 340000, + ['category'] = 'super', + ['hash'] = `zentorno`, + ['shop'] = 'pdm', + }, + ['zion'] = { + ['name'] = 'Zion', + ['brand'] = 'Übermacht', + ['model'] = 'zion', + ['price'] = 22000, + ['category'] = 'coupes', + ['hash'] = `zion`, + ['shop'] = 'pdm', + }, + ['zion2'] = { + ['name'] = 'Zion Cabrio', + ['brand'] = 'Übermacht', + ['model'] = 'zion2', + ['price'] = 28000, + ['category'] = 'coupes', + ['hash'] = `zion2`, + ['shop'] = 'pdm', + }, + ['zombieb'] = { + ['name'] = 'Zombie Chopper', + ['brand'] = 'Western', + ['model'] = 'zombieb', + ['price'] = 27000, + ['category'] = 'motorcycles', + ['hash'] = `zombieb`, + ['shop'] = 'pdm', + }, + ['ztype'] = { + ['name'] = 'Z-Type', + ['brand'] = 'Truffade', + ['model'] = 'ztype', + ['price'] = 270000, + ['category'] = 'sportsclassics', + ['hash'] = `ztype`, + ['shop'] = 'pdm', }, ----------MUST BE ENABLED FOR THE BELOW VEHICLES-------------+set sv_enforceGameBuild 2189------------------------------- ----------MUST BE ENABLED FOR THE BELOW VEHICLES-------------+set sv_enforceGameBuild 2189------------------------------- @@ -2718,1699 +2718,1699 @@ QBShared.Vehicles = { ----------MUST BE ENABLED FOR THE BELOW VEHICLES-------------+set sv_enforceGameBuild 2189------------------------------- ----------MUST BE ENABLED FOR THE BELOW VEHICLES-------------+set sv_enforceGameBuild 2189------------------------------- ----------MUST BE ENABLED FOR THE BELOW VEHICLES-------------+set sv_enforceGameBuild 2189------------------------------- - ["akuma"] = { - ["name"] = "Akuma", - ["brand"] = "Dinka", - ["model"] = "akuma", - ["price"] = 55000, - ["category"] = "motorcycles", - ["hash"] = `akuma`, - ["shop"] = "pdm", - }, - ["asbo"] = { - ["name"] = "Asbo", - ["brand"] = "Maxwell", - ["model"] = "asbo", - ["price"] = 4000, - ["category"] = "compacts", - ["hash"] = `asbo`, - ["shop"] = "pdm", - }, - ["asterope"] = { - ["name"] = "Asterope", - ["brand"] = "Karin", - ["model"] = "asterope", - ["price"] = 11000, - ["category"] = "sedans", - ["hash"] = `asterope`, - ["shop"] = "pdm", - }, - ["baller"] = { - ["name"] = "Baller", - ["brand"] = "Gallivanter", - ["model"] = "baller", - ["price"] = 22000, - ["category"] = "suvs", - ["hash"] = `baller`, - ["shop"] = "pdm", - }, - ["baller4"] = { - ["name"] = "Baller LE LWB", - ["brand"] = "Gallivanter", - ["model"] = "baller4", - ["price"] = 29000, - ["category"] = "suvs", - ["hash"] = `baller4`, - ["shop"] = "pdm", - }, - ["baller5"] = { - ["name"] = "Baller LE (Armored)", - ["brand"] = "Gallivanter", - ["model"] = "baller5", - ["price"] = 78000, - ["category"] = "suvs", - ["hash"] = `baller5`, - ["shop"] = "pdm", - }, - ["baller6"] = { - ["name"] = "Baller LE LWB (Armored)", - ["brand"] = "Gallivanter", - ["model"] = "baller6", - ["price"] = 82000, - ["category"] = "suvs", - ["hash"] = `baller6`, - ["shop"] = "pdm", - }, - ["bati2"] = { - ["name"] = "Bati 801RR", - ["brand"] = "Pegassi", - ["model"] = "bati2", - ["price"] = 19000, - ["category"] = "motorcycles", - ["hash"] = `bati2`, - ["shop"] = "pdm", - }, - ["bf400"] = { - ["name"] = "BF400", - ["brand"] = "Nagasaki", - ["model"] = "bf400", - ["price"] = 22000, - ["category"] = "motorcycles", - ["hash"] = `bf400`, - ["shop"] = "pdm", - }, - ["blazer2"] = { - ["name"] = "Blazer Lifeguard", - ["brand"] = "Nagasaki", - ["model"] = "blazer2", - ["price"] = 7000, - ["category"] = "offroad", - ["hash"] = `blazer2`, - ["shop"] = "pdm", - }, - ["blazer3"] = { - ["name"] = "Blazer Hot Rod", - ["brand"] = "Nagasaki", - ["model"] = "blazer3", - ["price"] = 7000, - ["category"] = "offroad", - ["hash"] = `blazer3`, - ["shop"] = "pdm", - }, - ["blazer5"] = { - ["name"] = "Blazer Aqua", - ["brand"] = "Nagasaki", - ["model"] = "blazer5", - ["price"] = 40000, - ["category"] = "offroad", - ["hash"] = `blazer5`, - ["shop"] = "pdm", - }, - ["blista3"] = { - ["name"] = "Blista Go Go Monkey", - ["brand"] = "Dinka", - ["model"] = "blista3", - ["price"] = 15000, - ["category"] = "compacts", - ["hash"] = `blista3`, - ["shop"] = "pdm", - }, - ["bmx"] = { - ["name"] = "BMX", - ["model"] = "bmx", - ["price"] = 160, - ["category"] = "cycles", - ["hash"] = `bmx`, - ["shop"] = "pdm", - }, - ["brioso2"] = { - ["name"] = "Brioso 300", - ["brand"] = "Grotti", - ["model"] = "brioso2", - ["price"] = 12000, - ["category"] = "compacts", - ["hash"] = `brioso2`, - ["shop"] = "pdm", - }, - ["caracara"] = { - ["name"] = "Caracara", - ["brand"] = "Vapid", - ["model"] = "caracara", - ["price"] = 60000, - ["category"] = "offroad", - ["hash"] = `caracara`, - ["shop"] = "pdm", - }, - ["caracara2"] = { - ["name"] = "Caracara 4x4", - ["brand"] = "Vapid", - ["model"] = "caracara2", - ["price"] = 80000, - ["category"] = "offroad", - ["hash"] = `caracara2`, - ["shop"] = "pdm", - }, - ["cavalcade"] = { - ["name"] = "Cavalcade", - ["brand"] = "Albany", - ["model"] = "cavalcade", - ["price"] = 14000, - ["category"] = "suvs", - ["hash"] = `cavalcade`, - ["shop"] = "pdm", - }, - ["cheburek"] = { - ["name"] = "Cheburek", - ["brand"] = "Rune", - ["model"] = "cheburek", - ["price"] = 7000, - ["category"] = "sportsclassic", - ["hash"] = `cheburek`, - ["shop"] = "pdm", - }, - ["cliffhanger"] = { - ["name"] = "Cliffhanger", - ["brand"] = "Western", - ["model"] = "cliffhanger", - ["price"] = 28500, - ["category"] = "motorcycles", - ["hash"] = `cliffhanger`, - ["shop"] = "pdm", - }, - ["clique"] = { - ["name"] = "Clique", - ["brand"] = "Vapid", - ["model"] = "clique", - ["price"] = 20000, - ["category"] = "muscle", - ["hash"] = `clique`, - ["shop"] = "pdm", - }, - ["club"] = { - ["name"] = "Club", - ["brand"] = "BF", - ["model"] = "club", - ["price"] = 8000, - ["category"] = "compacts", - ["hash"] = `club`, - ["shop"] = "pdm", - }, - ["cog55"] = { - ["name"] = "Cognoscenti 55", - ["brand"] = "Enus", - ["model"] = "cog55", - ["price"] = 22000, - ["category"] = "sedans", - ["hash"] = `cog55`, - ["shop"] = "pdm", - }, - ["comet4"] = { - ["name"] = "Comet Safari", - ["brand"] = "Pfister", - ["model"] = "comet4", - ["price"] = 110000, - ["category"] = "sports", - ["hash"] = `comet4`, - ["shop"] = "pdm", - }, - ["contender"] = { - ["name"] = "Contender", - ["brand"] = "Vapid", - ["model"] = "contender", - ["price"] = 35000, - ["category"] = "suvs", - ["hash"] = `contender`, - ["shop"] = "pdm", - }, - ["coquette4"] = { - ["name"] = "Coquette D10", - ["brand"] = "Invetero", - ["model"] = "coquette4", - ["price"] = 220000, - ["category"] = "sports", - ["hash"] = `coquette4`, - ["shop"] = "pdm", - }, - ["cruiser"] = { - ["name"] = "Cruiser", - ["model"] = "cruiser", - ["price"] = 510, - ["category"] = "cycles", - ["hash"] = `cruiser`, - ["shop"] = "pdm", - }, - ["daemon2"] = { - ["name"] = "Daemon Custom", - ["brand"] = "Western", - ["model"] = "daemon2", - ["price"] = 23000, - ["category"] = "motorcycles", - ["hash"] = `daemon2`, - ["shop"] = "pdm", - }, - ["deluxo"] = { - ["name"] = "Deluxo", - ["brand"] = "Imponte", - ["model"] = "deluxo", - ["price"] = 55000, - ["category"] = "sportsclassic", - ["hash"] = `deluxo`, - ["shop"] = "pdm", - }, - ["deveste"] = { - ["name"] = "Deveste", - ["brand"] = "Principe", - ["model"] = "deveste", - ["price"] = 234000, - ["category"] = "super", - ["hash"] = `deveste`, - ["shop"] = "pdm", - }, - ["deviant"] = { - ["name"] = "Deviant", - ["brand"] = "Schyster", - ["model"] = "deviant", - ["price"] = 70000, - ["category"] = "muscle", - ["hash"] = `deviant`, - ["shop"] = "pdm", - }, - ["diablous"] = { - ["name"] = "Diablous", - ["brand"] = "Principe", - ["model"] = "diablous", - ["price"] = 30000, - ["category"] = "motorcycles", - ["hash"] = `diablous`, - ["shop"] = "pdm", - }, - ["diablous2"] = { - ["name"] = "Diablous Custom", - ["brand"] = "Principe", - ["model"] = "diablous2", - ["price"] = 38000, - ["category"] = "motorcycles", - ["hash"] = `diablous2`, - ["shop"] = "pdm", - }, - ["dilettante2"] = { - ["name"] = "Dilettante Patrol", - ["brand"] = "Karin", - ["model"] = "dilettante2", - ["price"] = 12000, - ["category"] = "compacts", - ["hash"] = `dilettante2`, - ["shop"] = "pdm", - }, - ["dominator2"] = { - ["name"] = "Pißwasser Dominator", - ["brand"] = "Vapid", - ["model"] = "dominator2", - ["price"] = 50000, - ["category"] = "muscle", - ["hash"] = `dominator2`, - ["shop"] = "pdm", - }, - ["dominator3"] = { - ["name"] = "Dominator GTX", - ["brand"] = "Vapid", - ["model"] = "dominator3", - ["price"] = 70000, - ["category"] = "muscle", - ["hash"] = `dominator3`, - ["shop"] = "pdm", - }, - ["dominator4"] = { - ["name"] = "Dominator Arena", - ["brand"] = "Vapid", - ["model"] = "dominator4", - ["price"] = 200000, - ["category"] = "muscle", - ["hash"] = `dominator4`, - ["shop"] = "pdm", - }, - ["double"] = { - ["name"] = "Double-T", - ["brand"] = "Dinka", - ["model"] = "double", - ["price"] = 28000, - ["category"] = "motorcycles", - ["hash"] = `double`, - ["shop"] = "pdm", - }, - ["drafter"] = { - ["name"] = "8F Drafter", - ["brand"] = "Obey", - ["model"] = "drafter", - ["price"] = 80000, - ["category"] = "sports", - ["hash"] = `drafter`, - ["shop"] = "pdm", - }, - ["dubsta"] = { - ["name"] = "Dubsta", - ["brand"] = "Benefactor", - ["model"] = "dubsta", - ["price"] = 19000, - ["category"] = "suvs", - ["hash"] = `dubsta`, - ["shop"] = "pdm", - }, - ["dukes2"] = { - ["name"] = "Dukes Nightrider", - ["brand"] = "Imponte", - ["model"] = "dukes2", - ["price"] = 60000, - ["category"] = "muscle", - ["hash"] = `dukes2`, - ["shop"] = "pdm", - }, - ["dukes3"] = { - ["name"] = "Beater Dukes", - ["brand"] = "Imponte", - ["model"] = "dukes3", - ["price"] = 45000, - ["category"] = "muscle", - ["hash"] = `dukes3`, - ["shop"] = "pdm", - }, - ["dynasty"] = { - ["name"] = "Dynasty", - ["brand"] = "Weeny", - ["model"] = "dynasty", - ["price"] = 25000, - ["category"] = "sportsclassic", - ["hash"] = `dynasty`, - ["shop"] = "pdm", - }, - ["emerus"] = { - ["name"] = "Emerus", - ["brand"] = "Progen", - ["model"] = "emerus", - ["price"] = 220000, - ["category"] = "super", - ["hash"] = `emerus`, - ["shop"] = "pdm", - }, - ["enduro"] = { - ["name"] = "Enduro", - ["brand"] = "Dinka", - ["model"] = "enduro", - ["price"] = 5500, - ["category"] = "motorcycles", - ["hash"] = `enduro`, - ["shop"] = "pdm", - }, - ["everon"] = { - ["name"] = "Everon", - ["brand"] = "Karin", - ["model"] = "everon", - ["price"] = 60000, - ["category"] = "offroad", - ["hash"] = `everon`, - ["shop"] = "pdm", - }, - ["faction3"] = { - ["name"] = "Faction Custom Donk", - ["brand"] = "Willard", - ["model"] = "faction3", - ["price"] = 35000, - ["category"] = "muscle", - ["hash"] = `faction3`, - ["shop"] = "pdm", - }, - ["faggio2"] = { - ["name"] = "Faggio", - ["brand"] = "Pegassi", - ["model"] = "faggio2", - ["price"] = 1900, - ["category"] = "motorcycles", - ["hash"] = `faggio2`, - ["shop"] = "pdm", - }, - ["fcr"] = { - ["name"] = "FCR 1000", - ["brand"] = "Pegassi", - ["model"] = "fcr", - ["price"] = 5000, - ["category"] = "motorcycles", - ["hash"] = `fcr`, - ["shop"] = "pdm", - }, - ["fcr2"] = { - ["name"] = "FCR 1000 Custom", - ["brand"] = "Pegassi", - ["model"] = "fcr2", - ["price"] = 19000, - ["category"] = "motorcycles", - ["hash"] = `fcr2`, - ["shop"] = "pdm", - }, - ["fixter"] = { - ["name"] = "Fixter", - ["model"] = "fixter", - ["price"] = 225, - ["category"] = "cycles", - ["hash"] = `fixter`, - ["shop"] = "pdm", - }, - ["freecrawler"] = { - ["name"] = "Freecrawler", - ["brand"] = "Canis", - ["model"] = "freecrawler", - ["price"] = 24000, - ["category"] = "offroad", - ["hash"] = `freecrawler`, - ["shop"] = "pdm", - }, - ["furia"] = { - ["name"] = "Furia", - ["brand"] = "Grotti", - ["model"] = "furia", - ["price"] = 230000, - ["category"] = "super", - ["hash"] = `furia`, - ["shop"] = "pdm", - }, - ["gargoyle"] = { - ["name"] = "Gargoyle", - ["brand"] = "Western", - ["model"] = "gargoyle", - ["price"] = 32000, - ["category"] = "motorcycles", - ["hash"] = `gargoyle`, - ["shop"] = "pdm", - }, - ["gauntlet2"] = { - ["name"] = "Redwood Gauntlet", - ["brand"] = "Bravado", - ["model"] = "gauntlet2", - ["price"] = 70000, - ["category"] = "muscle", - ["hash"] = `gauntlet2`, - ["shop"] = "pdm", - }, - ["gauntlet3"] = { - ["name"] = "Classic Gauntlet", - ["brand"] = "Bravado", - ["model"] = "gauntlet3", - ["price"] = 75000, - ["category"] = "muscle", - ["hash"] = `gauntlet3`, - ["shop"] = "pdm", - }, - ["gauntlet4"] = { - ["name"] = "Gauntlet Hellfire", - ["brand"] = "Bravado", - ["model"] = "gauntlet4", - ["price"] = 80000, - ["category"] = "muscle", - ["hash"] = `gauntlet4`, - ["shop"] = "pdm", - }, - ["gauntlet5"] = { - ["name"] = "Gauntlet Classic Custom", - ["brand"] = "Bravado", - ["model"] = "gauntlet5", - ["price"] = 120000, - ["category"] = "muscle", - ["hash"] = `gauntlet5`, - ["shop"] = "pdm", - }, - ["gb200"] = { - ["name"] = "GB 200", - ["brand"] = "Vapid", - ["model"] = "gb200", - ["price"] = 140000, - ["category"] = "sports", - ["hash"] = `gb200`, - ["shop"] = "pdm", - }, - ["glendale2"] = { - ["name"] = "Glendale", - ["brand"] = "Benefactor", - ["model"] = "glendale2", - ["price"] = 12000, - ["category"] = "sedans", - ["hash"] = `glendale2`, - ["shop"] = "pdm", - }, - ["habanero"] = { - ["name"] = "Habanero", - ["brand"] = "Emperor", - ["model"] = "habanero", - ["price"] = 20000, - ["category"] = "suvs", - ["hash"] = `habanero`, - ["shop"] = "pdm", - }, - ["hakuchou2"] = { - ["name"] = "Hakuchou Drag", - ["brand"] = "Shitzu", - ["model"] = "hakuchou2", - ["price"] = 45000, - ["category"] = "motorcycles", - ["hash"] = `hakuchou2`, - ["shop"] = "pdm", - }, - ["hellion"] = { - ["name"] = "Hellion", - ["brand"] = "Annis", - ["model"] = "hellion", - ["price"] = 38000, - ["category"] = "offroad", - ["hash"] = `hellion`, - ["shop"] = "pdm", - }, - ["hermes"] = { - ["name"] = "Hermes", - ["brand"] = "Albany", - ["model"] = "hermes", - ["price"] = 535000, - ["category"] = "muscle", - ["hash"] = `hermes`, - ["shop"] = "pdm", - }, - ["imorgon"] = { - ["name"] = "Imorgon", - ["brand"] = "Overflod", - ["model"] = "imorgon", - ["price"] = 120000, - ["category"] = "sports", - ["hash"] = `imorgon`, - ["shop"] = "pdm", - }, - ["ingot"] = { - ["name"] = "Ingot", - ["brand"] = "Vulcar", - ["model"] = "ingot", - ["price"] = 4999, - ["category"] = "sedans", - ["hash"] = `ingot`, - ["shop"] = "pdm", - }, - ["innovation"] = { - ["name"] = "Innovation", - ["brand"] = "LLC", - ["model"] = "innovation", - ["price"] = 33500, - ["category"] = "motorcycles", - ["hash"] = `innovation`, - ["shop"] = "pdm", - }, - ["issi4"] = { - ["name"] = "Issi Arena", - ["brand"] = "Weeny", - ["model"] = "issi4", - ["price"] = 80000, - ["category"] = "compacts", - ["hash"] = `issi4`, - ["shop"] = "pdm", - }, - ["issi7"] = { - ["name"] = "Issi Sport", - ["brand"] = "Weeny", - ["model"] = "issi7", - ["price"] = 100000, - ["category"] = "compacts", - ["hash"] = `issi7`, - ["shop"] = "pdm", - }, - ["italigtb2"] = { - ["name"] = "Itali GTB", - ["brand"] = "Progen", - ["model"] = "italigtb2", - ["price"] = 250000, - ["category"] = "super", - ["hash"] = `italigtb2`, - ["shop"] = "pdm", - }, - ["italigto"] = { - ["name"] = "Itali GTO", - ["brand"] = "Progen", - ["model"] = "italigto", - ["price"] = 260000, - ["category"] = "sports", - ["hash"] = `italigto`, - ["shop"] = "pdm", - }, - ["italirsx"] = { - ["name"] = "Itali RSX", - ["brand"] = "Progen", - ["model"] = "italirsx", - ["price"] = 260000, - ["category"] = "sports", - ["hash"] = `italirsx`, - ["shop"] = "pdm", - }, - ["jb700"] = { - ["name"] = "JB 700", - ["brand"] = "Dewbauchee", - ["model"] = "jb700", - ["price"] = 240000, - ["category"] = "sportsclassic", - ["hash"] = `jb700`, - ["shop"] = "pdm", - }, - ["jb7002"] = { - ["name"] = "JB 700W", - ["brand"] = "Dewbauchee", - ["model"] = "jb7002", - ["price"] = 40000, - ["category"] = "sportsclassic", - ["hash"] = `jb7002`, - ["shop"] = "pdm", - }, - ["jester2"] = { - ["name"] = "Jester Racecar", - ["brand"] = "Dinka", - ["model"] = "jester2", - ["price"] = 210000, - ["category"] = "sports", - ["hash"] = `jester2`, - ["shop"] = "pdm", - }, - ["journey"] = { - ["name"] = "Journey", - ["brand"] = "Zirconium", - ["model"] = "journey", - ["price"] = 6500, - ["category"] = "vans", - ["hash"] = `journey`, - ["shop"] = "pdm", - }, - ["jugular"] = { - ["name"] = "Jugular", - ["brand"] = "Ocelot", - ["model"] = "jugular", - ["price"] = 80000, - ["category"] = "sports", - ["hash"] = `jugular`, - ["shop"] = "pdm", - }, - ["kalahari"] = { - ["name"] = "Kalahari", - ["brand"] = "Canis", - ["model"] = "kalahari", - ["price"] = 14000, - ["category"] = "offroad", - ["hash"] = `kalahari`, - ["shop"] = "pdm", - }, - ["kamacho"] = { - ["name"] = "Kamacho", - ["brand"] = "Canis", - ["model"] = "kamacho", - ["price"] = 50000, - ["category"] = "offroad", - ["hash"] = `kamacho`, - ["shop"] = "pdm", - }, - ["kanjo"] = { - ["name"] = "Blista Kanjo", - ["brand"] = "Dinka", - ["model"] = "kanjo", - ["price"] = 12000, - ["category"] = "compacts", - ["hash"] = `kanjo`, - ["shop"] = "pdm", - }, - ["komoda"] = { - ["name"] = "Komoda", - ["brand"] = "Lampadati", - ["model"] = "komoda", - ["price"] = 55000, - ["category"] = "sports", - ["hash"] = `komoda`, - ["shop"] = "pdm", - }, - ["krieger"] = { - ["name"] = "Krieger", - ["brand"] = "Benefactor", - ["model"] = "krieger", - ["price"] = 222000, - ["category"] = "super", - ["hash"] = `krieger`, - ["shop"] = "pdm", - }, - ["landstalker2"] = { - ["name"] = "Landstalker XL", - ["brand"] = "Dundreary", - ["model"] = "landstalker2", - ["price"] = 26000, - ["category"] = "suvs", - ["hash"] = `landstalker2`, - ["shop"] = "pdm", - }, - ["le7b"] = { - ["name"] = "RE-7B", - ["brand"] = "Annis", - ["model"] = "le7b", - ["price"] = 260000, - ["category"] = "super", - ["hash"] = `le7b`, - ["shop"] = "pdm", - }, - ["lectro"] = { - ["name"] = "Lectro", - ["brand"] = "Principe", - ["model"] = "lectro", - ["price"] = 28000, - ["category"] = "motorcycles", - ["hash"] = `lectro`, - ["shop"] = "pdm", - }, - ["locust"] = { - ["name"] = "Locust", - ["brand"] = "Ocelot", - ["model"] = "locust", - ["price"] = 200000, - ["category"] = "sports", - ["hash"] = `locust`, - ["shop"] = "pdm", - }, - ["lurcher"] = { - ["name"] = "Gauntlet Classic Custom", - ["brand"] = "Bravado", - ["model"] = "lurcher", - ["price"] = 21000, - ["category"] = "muscle", - ["hash"] = `lurcher`, - ["shop"] = "pdm", - }, - ["manana"] = { - ["name"] = "Manana", - ["brand"] = "Albany", - ["model"] = "manana", - ["price"] = 12800, - ["category"] = "muscle", - ["hash"] = `manana`, - ["shop"] = "pdm", - }, - ["manana2"] = { - ["name"] = "Manana Custom", - ["brand"] = "Albany", - ["model"] = "manana2", - ["price"] = 24000, - ["category"] = "muscle", - ["hash"] = `manana2`, - ["shop"] = "pdm", - }, - ["manchez"] = { - ["name"] = "Manchez", - ["brand"] = "Maibatsu", - ["model"] = "manchez", - ["price"] = 8300, - ["category"] = "motorcycles", - ["hash"] = `manchez`, - ["shop"] = "pdm", - }, - ["manchez2"] = { - ["name"] = "Manchez", - ["brand"] = "Maibatsu", - ["model"] = "manchez2", - ["price"] = 14000, - ["category"] = "motorcycles", - ["hash"] = `manchez2`, - ["shop"] = "pdm", - }, - ["massacro2"] = { - ["name"] = "Massacro Racecar", - ["brand"] = "Dewbauchee", - ["model"] = "massacro2", - ["price"] = 80000, - ["category"] = "sports", - ["hash"] = `massacro2`, - ["shop"] = "pdm", - }, - ["mesa"] = { - ["name"] = "Mesa", - ["brand"] = "Canis", - ["model"] = "mesa", - ["price"] = 12000, - ["category"] = "offroad", - ["hash"] = `mesa`, - ["shop"] = "pdm", - }, - ["mesa3"] = { - ["name"] = "Mesa Merryweather", - ["brand"] = "Canis", - ["model"] = "mesa3", - ["price"] = 400000, - ["category"] = "offroad", - ["hash"] = `mesa3`, - ["shop"] = "pdm", - }, - ["michelli"] = { - ["name"] = "Michelli GT", - ["brand"] = "Lampadati", - ["model"] = "michelli", - ["price"] = 30000, - ["category"] = "sportsclassic", - ["hash"] = `michelli`, - ["shop"] = "pdm", - }, - ["minivan"] = { - ["name"] = "Minivan", - ["brand"] = "Vapid", - ["model"] = "minivan", - ["price"] = 7000, - ["category"] = "vans", - ["hash"] = `minivan`, - ["shop"] = "pdm", - }, - ["minivan2"] = { - ["name"] = "Minivan Custom", - ["brand"] = "Vapid", - ["model"] = "minivan2", - ["price"] = 10000, - ["category"] = "vans", - ["hash"] = `minivan2`, - ["shop"] = "pdm", - }, - ["moonbeam2"] = { - ["name"] = "Moonbeam Custom", - ["brand"] = "Declasse", - ["model"] = "moonbeam2", - ["price"] = 15000, - ["category"] = "vans", - ["hash"] = `moonbeam2`, - ["shop"] = "pdm", - }, - ["nebula"] = { - ["name"] = "Nebula", - ["brand"] = "Vulcar", - ["model"] = "nebula", - ["price"] = 22000, - ["category"] = "sportsclassic", - ["hash"] = `nebula`, - ["shop"] = "pdm", - }, - ["neo"] = { - ["name"] = "Neo", - ["brand"] = "Vysser", - ["model"] = "neo", - ["price"] = 230000, - ["category"] = "sports", - ["hash"] = `neo`, - ["shop"] = "pdm", - }, - ["nero2"] = { - ["name"] = "Nero Custom", - ["brand"] = "Truffade", - ["model"] = "nero2", - ["price"] = 260000, - ["category"] = "super", - ["hash"] = `nero2`, - ["shop"] = "pdm", - }, - ["novak"] = { - ["name"] = "Novak", - ["brand"] = "Lampadati", - ["model"] = "novak", - ["price"] = 70000, - ["category"] = "suvs", - ["hash"] = `novak`, - ["shop"] = "pdm", - }, - ["oppressor"] = { - ["name"] = "Oppressor", - ["brand"] = "Pegassi", - ["model"] = "oppressor", - ["price"] = 9999999, - ["category"] = "super", - ["hash"] = `oppressor`, - ["shop"] = "pdm", - }, - ["outlaw"] = { - ["name"] = "Outlaw", - ["brand"] = "Nagasaki", - ["model"] = "outlaw", - ["price"] = 15000, - ["category"] = "offroad", - ["hash"] = `outlaw`, - ["shop"] = "pdm", - }, - ["paradise"] = { - ["name"] = "Paradise", - ["brand"] = "Bravado", - ["model"] = "paradise", - ["price"] = 9000, - ["category"] = "vans", - ["hash"] = `paradise`, - ["shop"] = "pdm", - }, - ["paragon"] = { - ["name"] = "Paragon", - ["brand"] = "Enus", - ["model"] = "paragon", - ["price"] = 60000, - ["category"] = "sports", - ["hash"] = `paragon`, - ["shop"] = "pdm", - }, - ["penumbra"] = { - ["name"] = "Penumbra", - ["brand"] = "Maibatsu", - ["model"] = "penumbra", - ["price"] = 22000, - ["category"] = "sports", - ["hash"] = `penumbra`, - ["shop"] = "pdm", - }, - ["penumbra2"] = { - ["name"] = "Penumbra FF", - ["brand"] = "Maibatsu", - ["model"] = "penumbra2", - ["price"] = 30000, - ["category"] = "sports", - ["hash"] = `penumbra2`, - ["shop"] = "pdm", - }, - ["peyote"] = { - ["name"] = "Peyote", - ["brand"] = "Vapid", - ["model"] = "peyote", - ["price"] = 23500, - ["category"] = "sportsclassic", - ["hash"] = `peyote`, - ["shop"] = "pdm", - }, - ["peyote2"] = { - ["name"] = "Peyote Gasser", - ["brand"] = "Vapid", - ["model"] = "peyote2", - ["price"] = 40000, - ["category"] = "sportsclassic", - ["hash"] = `peyote2`, - ["shop"] = "pdm", - }, - ["peyote3"] = { - ["name"] = "Peyote Custom", - ["brand"] = "Vapid", - ["model"] = "peyote3", - ["price"] = 48000, - ["category"] = "sportsclassic", - ["hash"] = `peyote3`, - ["shop"] = "pdm", - }, - ["primo"] = { - ["name"] = "Primo", - ["brand"] = "Albany", - ["model"] = "primo", - ["price"] = 5000, - ["category"] = "sedans", - ["hash"] = `primo`, - ["shop"] = "pdm", - }, - ["rancherxl"] = { - ["name"] = "Rancher XL", - ["brand"] = "Declasse", - ["model"] = "rancherxl", - ["price"] = 24000, - ["category"] = "offroad", - ["hash"] = `rancherxl`, - ["shop"] = "pdm", - }, - ["raptor"] = { - ["name"] = "Raptor", - ["brand"] = "BF", - ["model"] = "raptor", - ["price"] = 90000, - ["category"] = "sports", - ["hash"] = `raptor`, - ["shop"] = "pdm", - }, - ["ratbike"] = { - ["name"] = "Rat Bike", - ["brand"] = "Western", - ["model"] = "ratbike", - ["price"] = 3000, - ["category"] = "motorcycles", - ["hash"] = `ratbike`, - ["shop"] = "pdm", - }, - ["rebla"] = { - ["name"] = "Rebla GTS", - ["brand"] = "Übermacht", - ["model"] = "rebla", - ["price"] = 21000, - ["category"] = "suvs", - ["hash"] = `rebla`, - ["shop"] = "pdm", - }, - ["retinue"] = { - ["name"] = "Retinue", - ["brand"] = "Vapid", - ["model"] = "retinue", - ["price"] = 32000, - ["category"] = "sportsclassic", - ["hash"] = `retinue`, - ["shop"] = "pdm", - }, - ["retinue2"] = { - ["name"] = "Retinue MKII", - ["brand"] = "Vapid", - ["model"] = "retinue2", - ["price"] = 38000, - ["category"] = "sportsclassic", - ["hash"] = `retinue2`, - ["shop"] = "pdm", - }, - ["riata"] = { - ["name"] = "Riata", - ["brand"] = "Vapid", - ["model"] = "riata", - ["price"] = 380000, - ["category"] = "offroad", - ["hash"] = `riata`, - ["shop"] = "pdm", - }, - ["ruiner"] = { - ["name"] = "Ruiner", - ["brand"] = "Imponte", - ["model"] = "ruiner", - ["price"] = 29000, - ["category"] = "muscle", - ["hash"] = `ruiner`, - ["shop"] = "pdm", - }, - ["ruiner2"] = { - ["name"] = "Ruiner 2000", - ["brand"] = "Imponte", - ["model"] = "ruiner2", - ["price"] = 50000, - ["category"] = "muscle", - ["hash"] = `ruiner2`, - ["shop"] = "pdm", - }, - ["rumpo3"] = { - ["name"] = "Rumpo Custom", - ["brand"] = "Bravado", - ["model"] = "rumpo3", - ["price"] = 19500, - ["category"] = "vans", - ["hash"] = `rumpo3`, - ["shop"] = "pdm", - }, - ["s80"] = { - ["name"] = "S80RR", - ["brand"] = "Annis", - ["model"] = "s80", - ["price"] = 205000, - ["category"] = "super", - ["hash"] = `s80`, - ["shop"] = "pdm", - }, - ["sadler"] = { - ["name"] = "Sadler", - ["brand"] = "Vapid", - ["model"] = "sadler", - ["price"] = 20000, - ["category"] = "offroad", - ["hash"] = `sadler`, - ["shop"] = "pdm", - }, - ["sanchez"] = { - ["name"] = "Sanchez Livery", - ["brand"] = "Maibatsu", - ["model"] = "sanchez", - ["price"] = 5300, - ["category"] = "motorcycles", - ["hash"] = `sanchez`, - ["shop"] = "pdm", - }, - ["sanchez2"] = { - ["name"] = "Sanchez", - ["brand"] = "Maibatsu", - ["model"] = "sanchez2", - ["price"] = 5300, - ["category"] = "motorcycles", - ["hash"] = `sanchez2`, - ["shop"] = "pdm", - }, - ["sanctus"] = { - ["name"] = "Sanctus", - ["brand"] = "LCC", - ["model"] = "sanctus", - ["price"] = 35000, - ["category"] = "motorcycles", - ["hash"] = `sanctus`, - ["shop"] = "pdm", - }, - ["sandking2"] = { - ["name"] = 'Sandking SWB', - ["brand"] = "Annis", - ["price"] = 38000, - ["category"] = "offroad", - ["model"] = "sandking2", - ["hash"] = `sandking2`, - ["shop"] = "pdm", - }, - ["savestra"] = { - ["name"] = "Savestra", - ["brand"] = "Annis", - ["model"] = "savestra", - ["price"] = 67000, - ["category"] = "sportsclassic", - ["hash"] = `savestra`, - ["shop"] = "pdm", - }, - ["schafter4"] = { - ["name"] = "Schafter LWB", - ["brand"] = "Benefactor", - ["model"] = "schafter4", - ["price"] = 21000, - ["category"] = "sports", - ["hash"] = `schafter4`, - ["shop"] = "pdm", - }, - ["schlagen"] = { - ["name"] = "Schlagen GT", - ["brand"] = "Benefactor", - ["model"] = "schlagen", - ["price"] = 160000, - ["category"] = "sports", - ["hash"] = `schlagen`, - ["shop"] = "pdm", - }, - ["schwarzer"] = { - ["name"] = "Schwartzer", - ["brand"] = "Benefactor", - ["model"] = "schwarzer", - ["price"] = 47000, - ["category"] = "sports", - ["hash"] = `schwarzer`, - ["shop"] = "pdm", - }, - ["scorcher"] = { - ["name"] = "Scorcher", - ["model"] = "scorcher", - ["price"] = 280, - ["category"] = "cycles", - ["hash"] = `scorcher`, - ["shop"] = "pdm", - }, - ["seminole2"] = { - ["name"] = "Seminole Frontier", - ["brand"] = "Canis", - ["model"] = "seminole2", - ["price"] = 13000, - ["category"] = "suvs", - ["hash"] = `seminole2`, - ["shop"] = "pdm", - }, - ["serrano"] = { - ["name"] = "Serrano", - ["brand"] = "Benefactor", - ["model"] = "serrano", - ["price"] = 48000, - ["category"] = "suvs", - ["hash"] = `serrano`, - ["shop"] = "pdm", - }, - ["sheava"] = { - ["name"] = "ETR1", - ["brand"] = "Emperor", - ["model"] = "sheava", - ["price"] = 220000, - ["category"] = "super", - ["hash"] = `sheava`, - ["shop"] = "pdm", - }, - ["shotaro"] = { - ["name"] = "Shotaro Concept", - ["brand"] = "Nagasaki", - ["model"] = "shotaro", - ["price"] = 320000, - ["category"] = "motorcycles", - ["hash"] = `shotaro`, - ["shop"] = "pdm", - }, - ["slamtruck"] = { - ["name"] = "Slam Truck", - ["brand"] = "Vapid", - ["model"] = "slamtruck", - ["price"] = 100000, - ["category"] = "muscle", - ["hash"] = `slamtruck`, - ["shop"] = "pdm", - }, - ["slamvan"] = { - ["name"] = "Slam Van", - ["brand"] = "Vapid", - ["model"] = "slamvan", - ["price"] = 30000, - ["category"] = "muscle", - ["hash"] = `slamvan`, - ["shop"] = "pdm", - }, - ["slamvan2"] = { - ["name"] = "Lost Slam Van", - ["brand"] = "Vapid", - ["model"] = "slamvan2", - ["price"] = 90000, - ["category"] = "muscle", - ["hash"] = `slamvan2`, - ["shop"] = "pdm", - }, - ["speedo"] = { - ["name"] = "Speedo", - ["brand"] = "Vapid", - ["model"] = "speedo", - ["price"] = 10000, - ["category"] = "vans", - ["hash"] = `speedo`, - ["shop"] = "pdm", - }, - ["speedo4"] = { - ["name"] = "Speedo Custom", - ["brand"] = "Vapid", - ["model"] = "speedo4", - ["price"] = 15000, - ["category"] = "vans", - ["hash"] = `speedo4`, - ["shop"] = "pdm", - }, - ["stalion2"] = { - ["name"] = "Stallion Burgershot", - ["brand"] = "Declasse", - ["model"] = "stalion2", - ["price"] = 40000, - ["category"] = "muscle", - ["hash"] = `stalion2`, - ["shop"] = "pdm", - }, - ["stanier"] = { - ["name"] = "Stanier", - ["brand"] = "Vapid", - ["model"] = "stanier", - ["price"] = 19000, - ["category"] = "sedans", - ["hash"] = `stanier`, - ["shop"] = "pdm", - }, - ["stinger"] = { - ["name"] = "Stinger", - ["brand"] = "Grotti", - ["model"] = "stinger", - ["price"] = 39500, - ["category"] = "sportsclassic", - ["hash"] = `stinger`, - ["shop"] = "pdm", - }, - ["stratum"] = { - ["name"] = "Stratum", - ["brand"] = "Zirconium", - ["model"] = "stratum", - ["price"] = 15000, - ["category"] = "sedans", - ["hash"] = `stratum`, - ["shop"] = "pdm", - }, - ["stretch"] = { - ["name"] = "Stretch", - ["brand"] = "Dundreary", - ["model"] = "stretch", - ["price"] = 19000, - ["category"] = "sedans", - ["hash"] = `stretch`, - ["shop"] = "pdm", - }, - ["stromberg"] = { - ["name"] = "Stromberg", - ["brand"] = "Ocelot", - ["model"] = "stromberg", - ["price"] = 80000, - ["category"] = "sportsclassic", - ["hash"] = `stromberg`, - ["shop"] = "pdm", - }, - ["stryder"] = { - ["name"] = "Stryder", - ["brand"] = "Nagasaki", - ["model"] = "stryder", - ["price"] = 50000, - ["category"] = "motorcycles", - ["hash"] = `stryder`, - ["shop"] = "pdm", - }, - ["sugoi"] = { - ["name"] = "Sugoi", - ["brand"] = "Dinka", - ["model"] = "sugoi", - ["price"] = 85000, - ["category"] = "sports", - ["hash"] = `sugoi`, - ["shop"] = "pdm", - }, - ["sultan2"] = { - ["name"] = "Sultan Custom", - ["brand"] = "Karin", - ["model"] = "sultan2", - ["price"] = 55000, - ["category"] = "sports", - ["hash"] = `sultan2`, - ["shop"] = "pdm", - }, - ["surfer"] = { - ["name"] = "Surfer", - ["brand"] = "BF", - ["model"] = "surfer", - ["price"] = 9000, - ["category"] = "vans", - ["hash"] = `surfer`, - ["shop"] = "pdm", - }, - ["swinger"] = { - ["name"] = "Swinger", - ["brand"] = "Ocelot", - ["model"] = "swinger", - ["price"] = 221000, - ["category"] = "sportsclassic", - ["hash"] = `swinger`, - ["shop"] = "pdm", - }, - ["thrax"] = { - ["name"] = "Thrax", - ["brand"] = "Truffade", - ["model"] = "thrax", - ["price"] = 180000, - ["category"] = "super", - ["hash"] = `thrax`, - ["shop"] = "pdm", - }, - ["tigon"] = { - ["name"] = "Tigon", - ["brand"] = "Lampadati", - ["model"] = "tigon", - ["price"] = 240000, - ["category"] = "super", - ["hash"] = `tigon`, - ["shop"] = "pdm", - }, - ["toreador"] = { - ["name"] = "Toreador", - ["brand"] = "Pegassi", - ["model"] = "toreador", - ["price"] = 50000, - ["category"] = "sportsclassic", - ["hash"] = `toreador`, - ["shop"] = "pdm", - }, - ["tornado"] = { - ["name"] = "Tornado", - ["brand"] = "Declasse", - ["model"] = "tornado", - ["price"] = 21000, - ["category"] = "sportsclassic", - ["hash"] = `tornado`, - ["shop"] = "pdm", - }, - ["tornado2"] = { - ["name"] = "Tornado Gang", - ["brand"] = "Declasse", - ["model"] = "tornado2", - ["price"] = 22000, - ["category"] = "sportsclassic", - ["hash"] = `tornado2`, - ["shop"] = "pdm", - }, - ["tornado5"] = { - ["name"] = "Tornado Custom", - ["brand"] = "Declasse", - ["model"] = "tornado5", - ["price"] = 22000, - ["category"] = "sportsclassic", - ["hash"] = `tornado5`, - ["shop"] = "pdm", - }, - ["toros"] = { - ["name"] = "Toros", - ["brand"] = "Pegassi", - ["model"] = "toros", - ["price"] = 65000, - ["category"] = "suvs", - ["hash"] = `toros`, - ["shop"] = "pdm", - }, - ["tribike"] = { - ["name"] = "Tri Bike", - ["model"] = "tribike", - ["price"] = 500, - ["category"] = "cycles", - ["hash"] = `tribike`, - ["shop"] = "pdm", - }, - ["tribike2"] = { - ["name"] = "Tri Bike 2", - ["model"] = "tribike2", - ["price"] = 700, - ["category"] = "cycles", - ["hash"] = `tribike2`, - ["shop"] = "pdm", - }, - ["tribike3"] = { - ["name"] = "Tri Bike 3", - ["model"] = "tribike3", - ["price"] = 520, - ["category"] = "cycles", - ["hash"] = `tribike3`, - ["shop"] = "pdm", - }, - ["tropos"] = { - ["name"] = "Tropos Rallye", - ["brand"] = "Lampadati", - ["model"] = "tropos", - ["price"] = 65000, - ["category"] = "sports", - ["hash"] = `tropos`, - ["shop"] = "pdm", - }, - ["tulip"] = { - ["name"] = "Tulip", - ["brand"] = "Declasse", - ["model"] = "tulip", - ["price"] = 80000, - ["category"] = "muscle", - ["hash"] = `tulip`, - ["shop"] = "pdm", - }, - ["turismo2"] = { - ["name"] = "Turismo Classic", - ["brand"] = "Grotti", - ["model"] = "turismo2", - ["price"] = 170000, - ["category"] = "sportsclassic", - ["hash"] = `turismo2`, - ["shop"] = "pdm", - }, - ["tyrus"] = { - ["name"] = "Tyrus", - ["brand"] = "Progen", - ["model"] = "tyrus", - ["price"] = 230000, - ["category"] = "super", - ["hash"] = `tyrus`, - ["shop"] = "pdm", - }, - ["vader"] = { - ["name"] = "Vader", - ["brand"] = "Shitzu", - ["model"] = "vader", - ["price"] = 7200, - ["category"] = "motorcycles", - ["hash"] = `vader`, - ["shop"] = "pdm", - }, - ["vagrant"] = { - ["name"] = 'Vagrant', - ["brand"] = "Maxwell", - ["price"] = 50000, - ["category"] = "offroad", - ["model"] = "vagrant", - ["hash"] = `vagrant`, - ["shop"] = "pdm", - }, - ["vamos"] = { - ["name"] = "Vamos", - ["brand"] = "Declasse", - ["model"] = "vamos", - ["price"] = 30000, - ["category"] = "muscle", - ["hash"] = `vamos`, - ["shop"] = "pdm", - }, - ["verus"] = { - ["name"] = 'Verus', - ["brand"] = "Dinka", - ["price"] = 20000, - ["category"] = "offroad", - ["model"] = "verus", - ["hash"] = `verus`, - ["shop"] = "pdm", - }, - ["vindicator"] = { - ["name"] = "Vindicator", - ["brand"] = "Dinka", - ["model"] = "vindicator", - ["price"] = 19000, - ["category"] = "motorcycles", - ["hash"] = `vindicator`, - ["shop"] = "pdm", - }, - ["virgo2"] = { - ["name"] = "Virgo Custom Classic", - ["brand"] = "Dundreary", - ["model"] = "virgo2", - ["price"] = 21000, - ["category"] = "muscle", - ["hash"] = `virgo2`, - ["shop"] = "pdm", - }, - ["viseris"] = { - ["name"] = "Viseris", - ["brand"] = "Lampadati", - ["model"] = "viseris", - ["price"] = 210000, - ["category"] = "sportsclassic", - ["hash"] = `viseris`, - ["shop"] = "pdm", - }, - ["voltic2"] = { - ["name"] = "Rocket Voltic", - ["brand"] = "Coil", - ["model"] = "voltic2", - ["price"] = 9830400, - ["category"] = "super", - ["hash"] = `voltic2`, - ["shop"] = "pdm", - }, - ["vortex"] = { - ["name"] = "Vortex", - ["brand"] = "Pegassi", - ["model"] = "vortex", - ["price"] = 31000, - ["category"] = "motorcycles", - ["hash"] = `vortex`, - ["shop"] = "pdm", - }, - ["vstr"] = { - ["name"] = "V-STR", - ["brand"] = "Albany", - ["model"] = "vstr", - ["price"] = 80000, - ["category"] = "sports", - ["hash"] = `vstr`, - ["shop"] = "pdm", - }, - ["warrener"] = { - ["name"] = "Warrener", - ["brand"] = "Vulcar", - ["model"] = "warrener", - ["price"] = 4000, - ["category"] = "sedans", - ["hash"] = `warrener`, - ["shop"] = "pdm", - }, - ["weevil"] = { - ["name"] = "Weevil", - ["brand"] = "BF", - ["model"] = "weevil", - ["price"] = 9000, - ["category"] = "compacts", - ["hash"] = `weevil`, - ["shop"] = "pdm", - }, - ["winky"] = { - ["name"] = 'Winky', - ["brand"] = "Vapid", - ["price"] = 10000, - ["category"] = "offroad", - ["model"] = "winky", - ["hash"] = `winky`, - ["shop"] = "pdm", - }, - ["wolfsbane"] = { - ["name"] = "Wolfsbane", - ["brand"] = "Western", - ["model"] = "wolfsbane", - ["price"] = 14000, - ["category"] = "motorcycles", - ["hash"] = `wolfsbane`, - ["shop"] = "pdm", - }, - ["yosemite2"] = { - ["name"] = "Yosemite Drift", - ["brand"] = "Declasse", - ["model"] = "yosemite2", - ["price"] = 55000, - ["category"] = "muscle", - ["hash"] = `yosemite2`, - ["shop"] = "pdm", - }, - ["yosemite3"] = { - ["name"] = 'Yosemite Rancher', - ["brand"] = "Declasse", - ["price"] = 425000, - ["category"] = "offroad", - ["model"] = "yosemite3", - ["hash"] = `yosemite3`, - ["shop"] = "pdm", - }, - ["youga"] = { - ["name"] = "Youga", - ["brand"] = "Bravado", - ["model"] = "youga", - ["price"] = 8000, - ["category"] = "vans", - ["hash"] = `youga`, - ["shop"] = "pdm", - }, - ["youga2"] = { - ["name"] = "Youga Classic", - ["brand"] = "Bravado", - ["model"] = "youga2", - ["price"] = 14500, - ["category"] = "vans", - ["hash"] = `youga2`, - ["shop"] = "pdm", - }, - ["youga3"] = { - ["name"] = "Youga Classic 4x4", - ["brand"] = "Bravado", - ["model"] = "youga3", - ["price"] = 15000, - ["category"] = "vans", - ["hash"] = `youga3`, - ["shop"] = "pdm", - }, - ["zion3"] = { - ["name"] = "Zion Classic", - ["brand"] = "Übermacht", - ["model"] = "zion3", - ["price"] = 45000, - ["category"] = "sportsclassic", - ["hash"] = `zion3`, - ["shop"] = "pdm", - }, - ["zombiea"] = { - ["name"] = "Zombie Bobber", - ["brand"] = "Western", - ["model"] = "zombiea", - ["price"] = 28000, - ["category"] = "motorcycles", - ["hash"] = `zombiea`, - ["shop"] = "pdm", - }, - ["zorrusso"] = { - ["name"] = "Zorrusso", - ["brand"] = "Pegassi", - ["model"] = "zorrusso", - ["price"] = 277000, - ["category"] = "super", - ["hash"] = `zorrusso`, - ["shop"] = "pdm", + ['akuma'] = { + ['name'] = 'Akuma', + ['brand'] = 'Dinka', + ['model'] = 'akuma', + ['price'] = 55000, + ['category'] = 'motorcycles', + ['hash'] = `akuma`, + ['shop'] = 'pdm', + }, + ['asbo'] = { + ['name'] = 'Asbo', + ['brand'] = 'Maxwell', + ['model'] = 'asbo', + ['price'] = 4000, + ['category'] = 'compacts', + ['hash'] = `asbo`, + ['shop'] = 'pdm', + }, + ['asterope'] = { + ['name'] = 'Asterope', + ['brand'] = 'Karin', + ['model'] = 'asterope', + ['price'] = 11000, + ['category'] = 'sedans', + ['hash'] = `asterope`, + ['shop'] = 'pdm', + }, + ['baller'] = { + ['name'] = 'Baller', + ['brand'] = 'Gallivanter', + ['model'] = 'baller', + ['price'] = 22000, + ['category'] = 'suvs', + ['hash'] = `baller`, + ['shop'] = 'pdm', + }, + ['baller4'] = { + ['name'] = 'Baller LE LWB', + ['brand'] = 'Gallivanter', + ['model'] = 'baller4', + ['price'] = 29000, + ['category'] = 'suvs', + ['hash'] = `baller4`, + ['shop'] = 'pdm', + }, + ['baller5'] = { + ['name'] = 'Baller LE (Armored)', + ['brand'] = 'Gallivanter', + ['model'] = 'baller5', + ['price'] = 78000, + ['category'] = 'suvs', + ['hash'] = `baller5`, + ['shop'] = 'pdm', + }, + ['baller6'] = { + ['name'] = 'Baller LE LWB (Armored)', + ['brand'] = 'Gallivanter', + ['model'] = 'baller6', + ['price'] = 82000, + ['category'] = 'suvs', + ['hash'] = `baller6`, + ['shop'] = 'pdm', + }, + ['bati2'] = { + ['name'] = 'Bati 801RR', + ['brand'] = 'Pegassi', + ['model'] = 'bati2', + ['price'] = 19000, + ['category'] = 'motorcycles', + ['hash'] = `bati2`, + ['shop'] = 'pdm', + }, + ['bf400'] = { + ['name'] = 'BF400', + ['brand'] = 'Nagasaki', + ['model'] = 'bf400', + ['price'] = 22000, + ['category'] = 'motorcycles', + ['hash'] = `bf400`, + ['shop'] = 'pdm', + }, + ['blazer2'] = { + ['name'] = 'Blazer Lifeguard', + ['brand'] = 'Nagasaki', + ['model'] = 'blazer2', + ['price'] = 7000, + ['category'] = 'offroad', + ['hash'] = `blazer2`, + ['shop'] = 'pdm', + }, + ['blazer3'] = { + ['name'] = 'Blazer Hot Rod', + ['brand'] = 'Nagasaki', + ['model'] = 'blazer3', + ['price'] = 7000, + ['category'] = 'offroad', + ['hash'] = `blazer3`, + ['shop'] = 'pdm', + }, + ['blazer5'] = { + ['name'] = 'Blazer Aqua', + ['brand'] = 'Nagasaki', + ['model'] = 'blazer5', + ['price'] = 40000, + ['category'] = 'offroad', + ['hash'] = `blazer5`, + ['shop'] = 'pdm', + }, + ['blista3'] = { + ['name'] = 'Blista Go Go Monkey', + ['brand'] = 'Dinka', + ['model'] = 'blista3', + ['price'] = 15000, + ['category'] = 'compacts', + ['hash'] = `blista3`, + ['shop'] = 'pdm', + }, + ['bmx'] = { + ['name'] = 'BMX', + ['model'] = 'bmx', + ['price'] = 160, + ['category'] = 'cycles', + ['hash'] = `bmx`, + ['shop'] = 'pdm', + }, + ['brioso2'] = { + ['name'] = 'Brioso 300', + ['brand'] = 'Grotti', + ['model'] = 'brioso2', + ['price'] = 12000, + ['category'] = 'compacts', + ['hash'] = `brioso2`, + ['shop'] = 'pdm', + }, + ['caracara'] = { + ['name'] = 'Caracara', + ['brand'] = 'Vapid', + ['model'] = 'caracara', + ['price'] = 60000, + ['category'] = 'offroad', + ['hash'] = `caracara`, + ['shop'] = 'pdm', + }, + ['caracara2'] = { + ['name'] = 'Caracara 4x4', + ['brand'] = 'Vapid', + ['model'] = 'caracara2', + ['price'] = 80000, + ['category'] = 'offroad', + ['hash'] = `caracara2`, + ['shop'] = 'pdm', + }, + ['cavalcade'] = { + ['name'] = 'Cavalcade', + ['brand'] = 'Albany', + ['model'] = 'cavalcade', + ['price'] = 14000, + ['category'] = 'suvs', + ['hash'] = `cavalcade`, + ['shop'] = 'pdm', + }, + ['cheburek'] = { + ['name'] = 'Cheburek', + ['brand'] = 'Rune', + ['model'] = 'cheburek', + ['price'] = 7000, + ['category'] = 'sportsclassic', + ['hash'] = `cheburek`, + ['shop'] = 'pdm', + }, + ['cliffhanger'] = { + ['name'] = 'Cliffhanger', + ['brand'] = 'Western', + ['model'] = 'cliffhanger', + ['price'] = 28500, + ['category'] = 'motorcycles', + ['hash'] = `cliffhanger`, + ['shop'] = 'pdm', + }, + ['clique'] = { + ['name'] = 'Clique', + ['brand'] = 'Vapid', + ['model'] = 'clique', + ['price'] = 20000, + ['category'] = 'muscle', + ['hash'] = `clique`, + ['shop'] = 'pdm', + }, + ['club'] = { + ['name'] = 'Club', + ['brand'] = 'BF', + ['model'] = 'club', + ['price'] = 8000, + ['category'] = 'compacts', + ['hash'] = `club`, + ['shop'] = 'pdm', + }, + ['cog55'] = { + ['name'] = 'Cognoscenti 55', + ['brand'] = 'Enus', + ['model'] = 'cog55', + ['price'] = 22000, + ['category'] = 'sedans', + ['hash'] = `cog55`, + ['shop'] = 'pdm', + }, + ['comet4'] = { + ['name'] = 'Comet Safari', + ['brand'] = 'Pfister', + ['model'] = 'comet4', + ['price'] = 110000, + ['category'] = 'sports', + ['hash'] = `comet4`, + ['shop'] = 'pdm', + }, + ['contender'] = { + ['name'] = 'Contender', + ['brand'] = 'Vapid', + ['model'] = 'contender', + ['price'] = 35000, + ['category'] = 'suvs', + ['hash'] = `contender`, + ['shop'] = 'pdm', + }, + ['coquette4'] = { + ['name'] = 'Coquette D10', + ['brand'] = 'Invetero', + ['model'] = 'coquette4', + ['price'] = 220000, + ['category'] = 'sports', + ['hash'] = `coquette4`, + ['shop'] = 'pdm', + }, + ['cruiser'] = { + ['name'] = 'Cruiser', + ['model'] = 'cruiser', + ['price'] = 510, + ['category'] = 'cycles', + ['hash'] = `cruiser`, + ['shop'] = 'pdm', + }, + ['daemon2'] = { + ['name'] = 'Daemon Custom', + ['brand'] = 'Western', + ['model'] = 'daemon2', + ['price'] = 23000, + ['category'] = 'motorcycles', + ['hash'] = `daemon2`, + ['shop'] = 'pdm', + }, + ['deluxo'] = { + ['name'] = 'Deluxo', + ['brand'] = 'Imponte', + ['model'] = 'deluxo', + ['price'] = 55000, + ['category'] = 'sportsclassic', + ['hash'] = `deluxo`, + ['shop'] = 'pdm', + }, + ['deveste'] = { + ['name'] = 'Deveste', + ['brand'] = 'Principe', + ['model'] = 'deveste', + ['price'] = 234000, + ['category'] = 'super', + ['hash'] = `deveste`, + ['shop'] = 'pdm', + }, + ['deviant'] = { + ['name'] = 'Deviant', + ['brand'] = 'Schyster', + ['model'] = 'deviant', + ['price'] = 70000, + ['category'] = 'muscle', + ['hash'] = `deviant`, + ['shop'] = 'pdm', + }, + ['diablous'] = { + ['name'] = 'Diablous', + ['brand'] = 'Principe', + ['model'] = 'diablous', + ['price'] = 30000, + ['category'] = 'motorcycles', + ['hash'] = `diablous`, + ['shop'] = 'pdm', + }, + ['diablous2'] = { + ['name'] = 'Diablous Custom', + ['brand'] = 'Principe', + ['model'] = 'diablous2', + ['price'] = 38000, + ['category'] = 'motorcycles', + ['hash'] = `diablous2`, + ['shop'] = 'pdm', + }, + ['dilettante2'] = { + ['name'] = 'Dilettante Patrol', + ['brand'] = 'Karin', + ['model'] = 'dilettante2', + ['price'] = 12000, + ['category'] = 'compacts', + ['hash'] = `dilettante2`, + ['shop'] = 'pdm', + }, + ['dominator2'] = { + ['name'] = 'Pißwasser Dominator', + ['brand'] = 'Vapid', + ['model'] = 'dominator2', + ['price'] = 50000, + ['category'] = 'muscle', + ['hash'] = `dominator2`, + ['shop'] = 'pdm', + }, + ['dominator3'] = { + ['name'] = 'Dominator GTX', + ['brand'] = 'Vapid', + ['model'] = 'dominator3', + ['price'] = 70000, + ['category'] = 'muscle', + ['hash'] = `dominator3`, + ['shop'] = 'pdm', + }, + ['dominator4'] = { + ['name'] = 'Dominator Arena', + ['brand'] = 'Vapid', + ['model'] = 'dominator4', + ['price'] = 200000, + ['category'] = 'muscle', + ['hash'] = `dominator4`, + ['shop'] = 'pdm', + }, + ['double'] = { + ['name'] = 'Double-T', + ['brand'] = 'Dinka', + ['model'] = 'double', + ['price'] = 28000, + ['category'] = 'motorcycles', + ['hash'] = `double`, + ['shop'] = 'pdm', + }, + ['drafter'] = { + ['name'] = '8F Drafter', + ['brand'] = 'Obey', + ['model'] = 'drafter', + ['price'] = 80000, + ['category'] = 'sports', + ['hash'] = `drafter`, + ['shop'] = 'pdm', + }, + ['dubsta'] = { + ['name'] = 'Dubsta', + ['brand'] = 'Benefactor', + ['model'] = 'dubsta', + ['price'] = 19000, + ['category'] = 'suvs', + ['hash'] = `dubsta`, + ['shop'] = 'pdm', + }, + ['dukes2'] = { + ['name'] = 'Dukes Nightrider', + ['brand'] = 'Imponte', + ['model'] = 'dukes2', + ['price'] = 60000, + ['category'] = 'muscle', + ['hash'] = `dukes2`, + ['shop'] = 'pdm', + }, + ['dukes3'] = { + ['name'] = 'Beater Dukes', + ['brand'] = 'Imponte', + ['model'] = 'dukes3', + ['price'] = 45000, + ['category'] = 'muscle', + ['hash'] = `dukes3`, + ['shop'] = 'pdm', + }, + ['dynasty'] = { + ['name'] = 'Dynasty', + ['brand'] = 'Weeny', + ['model'] = 'dynasty', + ['price'] = 25000, + ['category'] = 'sportsclassic', + ['hash'] = `dynasty`, + ['shop'] = 'pdm', + }, + ['emerus'] = { + ['name'] = 'Emerus', + ['brand'] = 'Progen', + ['model'] = 'emerus', + ['price'] = 220000, + ['category'] = 'super', + ['hash'] = `emerus`, + ['shop'] = 'pdm', + }, + ['enduro'] = { + ['name'] = 'Enduro', + ['brand'] = 'Dinka', + ['model'] = 'enduro', + ['price'] = 5500, + ['category'] = 'motorcycles', + ['hash'] = `enduro`, + ['shop'] = 'pdm', + }, + ['everon'] = { + ['name'] = 'Everon', + ['brand'] = 'Karin', + ['model'] = 'everon', + ['price'] = 60000, + ['category'] = 'offroad', + ['hash'] = `everon`, + ['shop'] = 'pdm', + }, + ['faction3'] = { + ['name'] = 'Faction Custom Donk', + ['brand'] = 'Willard', + ['model'] = 'faction3', + ['price'] = 35000, + ['category'] = 'muscle', + ['hash'] = `faction3`, + ['shop'] = 'pdm', + }, + ['faggio2'] = { + ['name'] = 'Faggio', + ['brand'] = 'Pegassi', + ['model'] = 'faggio2', + ['price'] = 1900, + ['category'] = 'motorcycles', + ['hash'] = `faggio2`, + ['shop'] = 'pdm', + }, + ['fcr'] = { + ['name'] = 'FCR 1000', + ['brand'] = 'Pegassi', + ['model'] = 'fcr', + ['price'] = 5000, + ['category'] = 'motorcycles', + ['hash'] = `fcr`, + ['shop'] = 'pdm', + }, + ['fcr2'] = { + ['name'] = 'FCR 1000 Custom', + ['brand'] = 'Pegassi', + ['model'] = 'fcr2', + ['price'] = 19000, + ['category'] = 'motorcycles', + ['hash'] = `fcr2`, + ['shop'] = 'pdm', + }, + ['fixter'] = { + ['name'] = 'Fixter', + ['model'] = 'fixter', + ['price'] = 225, + ['category'] = 'cycles', + ['hash'] = `fixter`, + ['shop'] = 'pdm', + }, + ['freecrawler'] = { + ['name'] = 'Freecrawler', + ['brand'] = 'Canis', + ['model'] = 'freecrawler', + ['price'] = 24000, + ['category'] = 'offroad', + ['hash'] = `freecrawler`, + ['shop'] = 'pdm', + }, + ['furia'] = { + ['name'] = 'Furia', + ['brand'] = 'Grotti', + ['model'] = 'furia', + ['price'] = 230000, + ['category'] = 'super', + ['hash'] = `furia`, + ['shop'] = 'pdm', + }, + ['gargoyle'] = { + ['name'] = 'Gargoyle', + ['brand'] = 'Western', + ['model'] = 'gargoyle', + ['price'] = 32000, + ['category'] = 'motorcycles', + ['hash'] = `gargoyle`, + ['shop'] = 'pdm', + }, + ['gauntlet2'] = { + ['name'] = 'Redwood Gauntlet', + ['brand'] = 'Bravado', + ['model'] = 'gauntlet2', + ['price'] = 70000, + ['category'] = 'muscle', + ['hash'] = `gauntlet2`, + ['shop'] = 'pdm', + }, + ['gauntlet3'] = { + ['name'] = 'Classic Gauntlet', + ['brand'] = 'Bravado', + ['model'] = 'gauntlet3', + ['price'] = 75000, + ['category'] = 'muscle', + ['hash'] = `gauntlet3`, + ['shop'] = 'pdm', + }, + ['gauntlet4'] = { + ['name'] = 'Gauntlet Hellfire', + ['brand'] = 'Bravado', + ['model'] = 'gauntlet4', + ['price'] = 80000, + ['category'] = 'muscle', + ['hash'] = `gauntlet4`, + ['shop'] = 'pdm', + }, + ['gauntlet5'] = { + ['name'] = 'Gauntlet Classic Custom', + ['brand'] = 'Bravado', + ['model'] = 'gauntlet5', + ['price'] = 120000, + ['category'] = 'muscle', + ['hash'] = `gauntlet5`, + ['shop'] = 'pdm', + }, + ['gb200'] = { + ['name'] = 'GB 200', + ['brand'] = 'Vapid', + ['model'] = 'gb200', + ['price'] = 140000, + ['category'] = 'sports', + ['hash'] = `gb200`, + ['shop'] = 'pdm', + }, + ['glendale2'] = { + ['name'] = 'Glendale', + ['brand'] = 'Benefactor', + ['model'] = 'glendale2', + ['price'] = 12000, + ['category'] = 'sedans', + ['hash'] = `glendale2`, + ['shop'] = 'pdm', + }, + ['habanero'] = { + ['name'] = 'Habanero', + ['brand'] = 'Emperor', + ['model'] = 'habanero', + ['price'] = 20000, + ['category'] = 'suvs', + ['hash'] = `habanero`, + ['shop'] = 'pdm', + }, + ['hakuchou2'] = { + ['name'] = 'Hakuchou Drag', + ['brand'] = 'Shitzu', + ['model'] = 'hakuchou2', + ['price'] = 45000, + ['category'] = 'motorcycles', + ['hash'] = `hakuchou2`, + ['shop'] = 'pdm', + }, + ['hellion'] = { + ['name'] = 'Hellion', + ['brand'] = 'Annis', + ['model'] = 'hellion', + ['price'] = 38000, + ['category'] = 'offroad', + ['hash'] = `hellion`, + ['shop'] = 'pdm', + }, + ['hermes'] = { + ['name'] = 'Hermes', + ['brand'] = 'Albany', + ['model'] = 'hermes', + ['price'] = 535000, + ['category'] = 'muscle', + ['hash'] = `hermes`, + ['shop'] = 'pdm', + }, + ['imorgon'] = { + ['name'] = 'Imorgon', + ['brand'] = 'Overflod', + ['model'] = 'imorgon', + ['price'] = 120000, + ['category'] = 'sports', + ['hash'] = `imorgon`, + ['shop'] = 'pdm', + }, + ['ingot'] = { + ['name'] = 'Ingot', + ['brand'] = 'Vulcar', + ['model'] = 'ingot', + ['price'] = 4999, + ['category'] = 'sedans', + ['hash'] = `ingot`, + ['shop'] = 'pdm', + }, + ['innovation'] = { + ['name'] = 'Innovation', + ['brand'] = 'LLC', + ['model'] = 'innovation', + ['price'] = 33500, + ['category'] = 'motorcycles', + ['hash'] = `innovation`, + ['shop'] = 'pdm', + }, + ['issi4'] = { + ['name'] = 'Issi Arena', + ['brand'] = 'Weeny', + ['model'] = 'issi4', + ['price'] = 80000, + ['category'] = 'compacts', + ['hash'] = `issi4`, + ['shop'] = 'pdm', + }, + ['issi7'] = { + ['name'] = 'Issi Sport', + ['brand'] = 'Weeny', + ['model'] = 'issi7', + ['price'] = 100000, + ['category'] = 'compacts', + ['hash'] = `issi7`, + ['shop'] = 'pdm', + }, + ['italigtb2'] = { + ['name'] = 'Itali GTB', + ['brand'] = 'Progen', + ['model'] = 'italigtb2', + ['price'] = 250000, + ['category'] = 'super', + ['hash'] = `italigtb2`, + ['shop'] = 'pdm', + }, + ['italigto'] = { + ['name'] = 'Itali GTO', + ['brand'] = 'Progen', + ['model'] = 'italigto', + ['price'] = 260000, + ['category'] = 'sports', + ['hash'] = `italigto`, + ['shop'] = 'pdm', + }, + ['italirsx'] = { + ['name'] = 'Itali RSX', + ['brand'] = 'Progen', + ['model'] = 'italirsx', + ['price'] = 260000, + ['category'] = 'sports', + ['hash'] = `italirsx`, + ['shop'] = 'pdm', + }, + ['jb700'] = { + ['name'] = 'JB 700', + ['brand'] = 'Dewbauchee', + ['model'] = 'jb700', + ['price'] = 240000, + ['category'] = 'sportsclassic', + ['hash'] = `jb700`, + ['shop'] = 'pdm', + }, + ['jb7002'] = { + ['name'] = 'JB 700W', + ['brand'] = 'Dewbauchee', + ['model'] = 'jb7002', + ['price'] = 40000, + ['category'] = 'sportsclassic', + ['hash'] = `jb7002`, + ['shop'] = 'pdm', + }, + ['jester2'] = { + ['name'] = 'Jester Racecar', + ['brand'] = 'Dinka', + ['model'] = 'jester2', + ['price'] = 210000, + ['category'] = 'sports', + ['hash'] = `jester2`, + ['shop'] = 'pdm', + }, + ['journey'] = { + ['name'] = 'Journey', + ['brand'] = 'Zirconium', + ['model'] = 'journey', + ['price'] = 6500, + ['category'] = 'vans', + ['hash'] = `journey`, + ['shop'] = 'pdm', + }, + ['jugular'] = { + ['name'] = 'Jugular', + ['brand'] = 'Ocelot', + ['model'] = 'jugular', + ['price'] = 80000, + ['category'] = 'sports', + ['hash'] = `jugular`, + ['shop'] = 'pdm', + }, + ['kalahari'] = { + ['name'] = 'Kalahari', + ['brand'] = 'Canis', + ['model'] = 'kalahari', + ['price'] = 14000, + ['category'] = 'offroad', + ['hash'] = `kalahari`, + ['shop'] = 'pdm', + }, + ['kamacho'] = { + ['name'] = 'Kamacho', + ['brand'] = 'Canis', + ['model'] = 'kamacho', + ['price'] = 50000, + ['category'] = 'offroad', + ['hash'] = `kamacho`, + ['shop'] = 'pdm', + }, + ['kanjo'] = { + ['name'] = 'Blista Kanjo', + ['brand'] = 'Dinka', + ['model'] = 'kanjo', + ['price'] = 12000, + ['category'] = 'compacts', + ['hash'] = `kanjo`, + ['shop'] = 'pdm', + }, + ['komoda'] = { + ['name'] = 'Komoda', + ['brand'] = 'Lampadati', + ['model'] = 'komoda', + ['price'] = 55000, + ['category'] = 'sports', + ['hash'] = `komoda`, + ['shop'] = 'pdm', + }, + ['krieger'] = { + ['name'] = 'Krieger', + ['brand'] = 'Benefactor', + ['model'] = 'krieger', + ['price'] = 222000, + ['category'] = 'super', + ['hash'] = `krieger`, + ['shop'] = 'pdm', + }, + ['landstalker2'] = { + ['name'] = 'Landstalker XL', + ['brand'] = 'Dundreary', + ['model'] = 'landstalker2', + ['price'] = 26000, + ['category'] = 'suvs', + ['hash'] = `landstalker2`, + ['shop'] = 'pdm', + }, + ['le7b'] = { + ['name'] = 'RE-7B', + ['brand'] = 'Annis', + ['model'] = 'le7b', + ['price'] = 260000, + ['category'] = 'super', + ['hash'] = `le7b`, + ['shop'] = 'pdm', + }, + ['lectro'] = { + ['name'] = 'Lectro', + ['brand'] = 'Principe', + ['model'] = 'lectro', + ['price'] = 28000, + ['category'] = 'motorcycles', + ['hash'] = `lectro`, + ['shop'] = 'pdm', + }, + ['locust'] = { + ['name'] = 'Locust', + ['brand'] = 'Ocelot', + ['model'] = 'locust', + ['price'] = 200000, + ['category'] = 'sports', + ['hash'] = `locust`, + ['shop'] = 'pdm', + }, + ['lurcher'] = { + ['name'] = 'Gauntlet Classic Custom', + ['brand'] = 'Bravado', + ['model'] = 'lurcher', + ['price'] = 21000, + ['category'] = 'muscle', + ['hash'] = `lurcher`, + ['shop'] = 'pdm', + }, + ['manana'] = { + ['name'] = 'Manana', + ['brand'] = 'Albany', + ['model'] = 'manana', + ['price'] = 12800, + ['category'] = 'muscle', + ['hash'] = `manana`, + ['shop'] = 'pdm', + }, + ['manana2'] = { + ['name'] = 'Manana Custom', + ['brand'] = 'Albany', + ['model'] = 'manana2', + ['price'] = 24000, + ['category'] = 'muscle', + ['hash'] = `manana2`, + ['shop'] = 'pdm', + }, + ['manchez'] = { + ['name'] = 'Manchez', + ['brand'] = 'Maibatsu', + ['model'] = 'manchez', + ['price'] = 8300, + ['category'] = 'motorcycles', + ['hash'] = `manchez`, + ['shop'] = 'pdm', + }, + ['manchez2'] = { + ['name'] = 'Manchez', + ['brand'] = 'Maibatsu', + ['model'] = 'manchez2', + ['price'] = 14000, + ['category'] = 'motorcycles', + ['hash'] = `manchez2`, + ['shop'] = 'pdm', + }, + ['massacro2'] = { + ['name'] = 'Massacro Racecar', + ['brand'] = 'Dewbauchee', + ['model'] = 'massacro2', + ['price'] = 80000, + ['category'] = 'sports', + ['hash'] = `massacro2`, + ['shop'] = 'pdm', + }, + ['mesa'] = { + ['name'] = 'Mesa', + ['brand'] = 'Canis', + ['model'] = 'mesa', + ['price'] = 12000, + ['category'] = 'offroad', + ['hash'] = `mesa`, + ['shop'] = 'pdm', + }, + ['mesa3'] = { + ['name'] = 'Mesa Merryweather', + ['brand'] = 'Canis', + ['model'] = 'mesa3', + ['price'] = 400000, + ['category'] = 'offroad', + ['hash'] = `mesa3`, + ['shop'] = 'pdm', + }, + ['michelli'] = { + ['name'] = 'Michelli GT', + ['brand'] = 'Lampadati', + ['model'] = 'michelli', + ['price'] = 30000, + ['category'] = 'sportsclassic', + ['hash'] = `michelli`, + ['shop'] = 'pdm', + }, + ['minivan'] = { + ['name'] = 'Minivan', + ['brand'] = 'Vapid', + ['model'] = 'minivan', + ['price'] = 7000, + ['category'] = 'vans', + ['hash'] = `minivan`, + ['shop'] = 'pdm', + }, + ['minivan2'] = { + ['name'] = 'Minivan Custom', + ['brand'] = 'Vapid', + ['model'] = 'minivan2', + ['price'] = 10000, + ['category'] = 'vans', + ['hash'] = `minivan2`, + ['shop'] = 'pdm', + }, + ['moonbeam2'] = { + ['name'] = 'Moonbeam Custom', + ['brand'] = 'Declasse', + ['model'] = 'moonbeam2', + ['price'] = 15000, + ['category'] = 'vans', + ['hash'] = `moonbeam2`, + ['shop'] = 'pdm', + }, + ['nebula'] = { + ['name'] = 'Nebula', + ['brand'] = 'Vulcar', + ['model'] = 'nebula', + ['price'] = 22000, + ['category'] = 'sportsclassic', + ['hash'] = `nebula`, + ['shop'] = 'pdm', + }, + ['neo'] = { + ['name'] = 'Neo', + ['brand'] = 'Vysser', + ['model'] = 'neo', + ['price'] = 230000, + ['category'] = 'sports', + ['hash'] = `neo`, + ['shop'] = 'pdm', + }, + ['nero2'] = { + ['name'] = 'Nero Custom', + ['brand'] = 'Truffade', + ['model'] = 'nero2', + ['price'] = 260000, + ['category'] = 'super', + ['hash'] = `nero2`, + ['shop'] = 'pdm', + }, + ['novak'] = { + ['name'] = 'Novak', + ['brand'] = 'Lampadati', + ['model'] = 'novak', + ['price'] = 70000, + ['category'] = 'suvs', + ['hash'] = `novak`, + ['shop'] = 'pdm', + }, + ['oppressor'] = { + ['name'] = 'Oppressor', + ['brand'] = 'Pegassi', + ['model'] = 'oppressor', + ['price'] = 9999999, + ['category'] = 'super', + ['hash'] = `oppressor`, + ['shop'] = 'pdm', + }, + ['outlaw'] = { + ['name'] = 'Outlaw', + ['brand'] = 'Nagasaki', + ['model'] = 'outlaw', + ['price'] = 15000, + ['category'] = 'offroad', + ['hash'] = `outlaw`, + ['shop'] = 'pdm', + }, + ['paradise'] = { + ['name'] = 'Paradise', + ['brand'] = 'Bravado', + ['model'] = 'paradise', + ['price'] = 9000, + ['category'] = 'vans', + ['hash'] = `paradise`, + ['shop'] = 'pdm', + }, + ['paragon'] = { + ['name'] = 'Paragon', + ['brand'] = 'Enus', + ['model'] = 'paragon', + ['price'] = 60000, + ['category'] = 'sports', + ['hash'] = `paragon`, + ['shop'] = 'pdm', + }, + ['penumbra'] = { + ['name'] = 'Penumbra', + ['brand'] = 'Maibatsu', + ['model'] = 'penumbra', + ['price'] = 22000, + ['category'] = 'sports', + ['hash'] = `penumbra`, + ['shop'] = 'pdm', + }, + ['penumbra2'] = { + ['name'] = 'Penumbra FF', + ['brand'] = 'Maibatsu', + ['model'] = 'penumbra2', + ['price'] = 30000, + ['category'] = 'sports', + ['hash'] = `penumbra2`, + ['shop'] = 'pdm', + }, + ['peyote'] = { + ['name'] = 'Peyote', + ['brand'] = 'Vapid', + ['model'] = 'peyote', + ['price'] = 23500, + ['category'] = 'sportsclassic', + ['hash'] = `peyote`, + ['shop'] = 'pdm', + }, + ['peyote2'] = { + ['name'] = 'Peyote Gasser', + ['brand'] = 'Vapid', + ['model'] = 'peyote2', + ['price'] = 40000, + ['category'] = 'sportsclassic', + ['hash'] = `peyote2`, + ['shop'] = 'pdm', + }, + ['peyote3'] = { + ['name'] = 'Peyote Custom', + ['brand'] = 'Vapid', + ['model'] = 'peyote3', + ['price'] = 48000, + ['category'] = 'sportsclassic', + ['hash'] = `peyote3`, + ['shop'] = 'pdm', + }, + ['primo'] = { + ['name'] = 'Primo', + ['brand'] = 'Albany', + ['model'] = 'primo', + ['price'] = 5000, + ['category'] = 'sedans', + ['hash'] = `primo`, + ['shop'] = 'pdm', + }, + ['rancherxl'] = { + ['name'] = 'Rancher XL', + ['brand'] = 'Declasse', + ['model'] = 'rancherxl', + ['price'] = 24000, + ['category'] = 'offroad', + ['hash'] = `rancherxl`, + ['shop'] = 'pdm', + }, + ['raptor'] = { + ['name'] = 'Raptor', + ['brand'] = 'BF', + ['model'] = 'raptor', + ['price'] = 90000, + ['category'] = 'sports', + ['hash'] = `raptor`, + ['shop'] = 'pdm', + }, + ['ratbike'] = { + ['name'] = 'Rat Bike', + ['brand'] = 'Western', + ['model'] = 'ratbike', + ['price'] = 3000, + ['category'] = 'motorcycles', + ['hash'] = `ratbike`, + ['shop'] = 'pdm', + }, + ['rebla'] = { + ['name'] = 'Rebla GTS', + ['brand'] = 'Übermacht', + ['model'] = 'rebla', + ['price'] = 21000, + ['category'] = 'suvs', + ['hash'] = `rebla`, + ['shop'] = 'pdm', + }, + ['retinue'] = { + ['name'] = 'Retinue', + ['brand'] = 'Vapid', + ['model'] = 'retinue', + ['price'] = 32000, + ['category'] = 'sportsclassic', + ['hash'] = `retinue`, + ['shop'] = 'pdm', + }, + ['retinue2'] = { + ['name'] = 'Retinue MKII', + ['brand'] = 'Vapid', + ['model'] = 'retinue2', + ['price'] = 38000, + ['category'] = 'sportsclassic', + ['hash'] = `retinue2`, + ['shop'] = 'pdm', + }, + ['riata'] = { + ['name'] = 'Riata', + ['brand'] = 'Vapid', + ['model'] = 'riata', + ['price'] = 380000, + ['category'] = 'offroad', + ['hash'] = `riata`, + ['shop'] = 'pdm', + }, + ['ruiner'] = { + ['name'] = 'Ruiner', + ['brand'] = 'Imponte', + ['model'] = 'ruiner', + ['price'] = 29000, + ['category'] = 'muscle', + ['hash'] = `ruiner`, + ['shop'] = 'pdm', + }, + ['ruiner2'] = { + ['name'] = 'Ruiner 2000', + ['brand'] = 'Imponte', + ['model'] = 'ruiner2', + ['price'] = 50000, + ['category'] = 'muscle', + ['hash'] = `ruiner2`, + ['shop'] = 'pdm', + }, + ['rumpo3'] = { + ['name'] = 'Rumpo Custom', + ['brand'] = 'Bravado', + ['model'] = 'rumpo3', + ['price'] = 19500, + ['category'] = 'vans', + ['hash'] = `rumpo3`, + ['shop'] = 'pdm', + }, + ['s80'] = { + ['name'] = 'S80RR', + ['brand'] = 'Annis', + ['model'] = 's80', + ['price'] = 205000, + ['category'] = 'super', + ['hash'] = `s80`, + ['shop'] = 'pdm', + }, + ['sadler'] = { + ['name'] = 'Sadler', + ['brand'] = 'Vapid', + ['model'] = 'sadler', + ['price'] = 20000, + ['category'] = 'offroad', + ['hash'] = `sadler`, + ['shop'] = 'pdm', + }, + ['sanchez'] = { + ['name'] = 'Sanchez Livery', + ['brand'] = 'Maibatsu', + ['model'] = 'sanchez', + ['price'] = 5300, + ['category'] = 'motorcycles', + ['hash'] = `sanchez`, + ['shop'] = 'pdm', + }, + ['sanchez2'] = { + ['name'] = 'Sanchez', + ['brand'] = 'Maibatsu', + ['model'] = 'sanchez2', + ['price'] = 5300, + ['category'] = 'motorcycles', + ['hash'] = `sanchez2`, + ['shop'] = 'pdm', + }, + ['sanctus'] = { + ['name'] = 'Sanctus', + ['brand'] = 'LCC', + ['model'] = 'sanctus', + ['price'] = 35000, + ['category'] = 'motorcycles', + ['hash'] = `sanctus`, + ['shop'] = 'pdm', + }, + ['sandking2'] = { + ['name'] = 'Sandking SWB', + ['brand'] = 'Annis', + ['price'] = 38000, + ['category'] = 'offroad', + ['model'] = 'sandking2', + ['hash'] = `sandking2`, + ['shop'] = 'pdm', + }, + ['savestra'] = { + ['name'] = 'Savestra', + ['brand'] = 'Annis', + ['model'] = 'savestra', + ['price'] = 67000, + ['category'] = 'sportsclassic', + ['hash'] = `savestra`, + ['shop'] = 'pdm', + }, + ['schafter4'] = { + ['name'] = 'Schafter LWB', + ['brand'] = 'Benefactor', + ['model'] = 'schafter4', + ['price'] = 21000, + ['category'] = 'sports', + ['hash'] = `schafter4`, + ['shop'] = 'pdm', + }, + ['schlagen'] = { + ['name'] = 'Schlagen GT', + ['brand'] = 'Benefactor', + ['model'] = 'schlagen', + ['price'] = 160000, + ['category'] = 'sports', + ['hash'] = `schlagen`, + ['shop'] = 'pdm', + }, + ['schwarzer'] = { + ['name'] = 'Schwartzer', + ['brand'] = 'Benefactor', + ['model'] = 'schwarzer', + ['price'] = 47000, + ['category'] = 'sports', + ['hash'] = `schwarzer`, + ['shop'] = 'pdm', + }, + ['scorcher'] = { + ['name'] = 'Scorcher', + ['model'] = 'scorcher', + ['price'] = 280, + ['category'] = 'cycles', + ['hash'] = `scorcher`, + ['shop'] = 'pdm', + }, + ['seminole2'] = { + ['name'] = 'Seminole Frontier', + ['brand'] = 'Canis', + ['model'] = 'seminole2', + ['price'] = 13000, + ['category'] = 'suvs', + ['hash'] = `seminole2`, + ['shop'] = 'pdm', + }, + ['serrano'] = { + ['name'] = 'Serrano', + ['brand'] = 'Benefactor', + ['model'] = 'serrano', + ['price'] = 48000, + ['category'] = 'suvs', + ['hash'] = `serrano`, + ['shop'] = 'pdm', + }, + ['sheava'] = { + ['name'] = 'ETR1', + ['brand'] = 'Emperor', + ['model'] = 'sheava', + ['price'] = 220000, + ['category'] = 'super', + ['hash'] = `sheava`, + ['shop'] = 'pdm', + }, + ['shotaro'] = { + ['name'] = 'Shotaro Concept', + ['brand'] = 'Nagasaki', + ['model'] = 'shotaro', + ['price'] = 320000, + ['category'] = 'motorcycles', + ['hash'] = `shotaro`, + ['shop'] = 'pdm', + }, + ['slamtruck'] = { + ['name'] = 'Slam Truck', + ['brand'] = 'Vapid', + ['model'] = 'slamtruck', + ['price'] = 100000, + ['category'] = 'muscle', + ['hash'] = `slamtruck`, + ['shop'] = 'pdm', + }, + ['slamvan'] = { + ['name'] = 'Slam Van', + ['brand'] = 'Vapid', + ['model'] = 'slamvan', + ['price'] = 30000, + ['category'] = 'muscle', + ['hash'] = `slamvan`, + ['shop'] = 'pdm', + }, + ['slamvan2'] = { + ['name'] = 'Lost Slam Van', + ['brand'] = 'Vapid', + ['model'] = 'slamvan2', + ['price'] = 90000, + ['category'] = 'muscle', + ['hash'] = `slamvan2`, + ['shop'] = 'pdm', + }, + ['speedo'] = { + ['name'] = 'Speedo', + ['brand'] = 'Vapid', + ['model'] = 'speedo', + ['price'] = 10000, + ['category'] = 'vans', + ['hash'] = `speedo`, + ['shop'] = 'pdm', + }, + ['speedo4'] = { + ['name'] = 'Speedo Custom', + ['brand'] = 'Vapid', + ['model'] = 'speedo4', + ['price'] = 15000, + ['category'] = 'vans', + ['hash'] = `speedo4`, + ['shop'] = 'pdm', + }, + ['stalion2'] = { + ['name'] = 'Stallion Burgershot', + ['brand'] = 'Declasse', + ['model'] = 'stalion2', + ['price'] = 40000, + ['category'] = 'muscle', + ['hash'] = `stalion2`, + ['shop'] = 'pdm', + }, + ['stanier'] = { + ['name'] = 'Stanier', + ['brand'] = 'Vapid', + ['model'] = 'stanier', + ['price'] = 19000, + ['category'] = 'sedans', + ['hash'] = `stanier`, + ['shop'] = 'pdm', + }, + ['stinger'] = { + ['name'] = 'Stinger', + ['brand'] = 'Grotti', + ['model'] = 'stinger', + ['price'] = 39500, + ['category'] = 'sportsclassic', + ['hash'] = `stinger`, + ['shop'] = 'pdm', + }, + ['stratum'] = { + ['name'] = 'Stratum', + ['brand'] = 'Zirconium', + ['model'] = 'stratum', + ['price'] = 15000, + ['category'] = 'sedans', + ['hash'] = `stratum`, + ['shop'] = 'pdm', + }, + ['stretch'] = { + ['name'] = 'Stretch', + ['brand'] = 'Dundreary', + ['model'] = 'stretch', + ['price'] = 19000, + ['category'] = 'sedans', + ['hash'] = `stretch`, + ['shop'] = 'pdm', + }, + ['stromberg'] = { + ['name'] = 'Stromberg', + ['brand'] = 'Ocelot', + ['model'] = 'stromberg', + ['price'] = 80000, + ['category'] = 'sportsclassic', + ['hash'] = `stromberg`, + ['shop'] = 'pdm', + }, + ['stryder'] = { + ['name'] = 'Stryder', + ['brand'] = 'Nagasaki', + ['model'] = 'stryder', + ['price'] = 50000, + ['category'] = 'motorcycles', + ['hash'] = `stryder`, + ['shop'] = 'pdm', + }, + ['sugoi'] = { + ['name'] = 'Sugoi', + ['brand'] = 'Dinka', + ['model'] = 'sugoi', + ['price'] = 85000, + ['category'] = 'sports', + ['hash'] = `sugoi`, + ['shop'] = 'pdm', + }, + ['sultan2'] = { + ['name'] = 'Sultan Custom', + ['brand'] = 'Karin', + ['model'] = 'sultan2', + ['price'] = 55000, + ['category'] = 'sports', + ['hash'] = `sultan2`, + ['shop'] = 'pdm', + }, + ['surfer'] = { + ['name'] = 'Surfer', + ['brand'] = 'BF', + ['model'] = 'surfer', + ['price'] = 9000, + ['category'] = 'vans', + ['hash'] = `surfer`, + ['shop'] = 'pdm', + }, + ['swinger'] = { + ['name'] = 'Swinger', + ['brand'] = 'Ocelot', + ['model'] = 'swinger', + ['price'] = 221000, + ['category'] = 'sportsclassic', + ['hash'] = `swinger`, + ['shop'] = 'pdm', + }, + ['thrax'] = { + ['name'] = 'Thrax', + ['brand'] = 'Truffade', + ['model'] = 'thrax', + ['price'] = 180000, + ['category'] = 'super', + ['hash'] = `thrax`, + ['shop'] = 'pdm', + }, + ['tigon'] = { + ['name'] = 'Tigon', + ['brand'] = 'Lampadati', + ['model'] = 'tigon', + ['price'] = 240000, + ['category'] = 'super', + ['hash'] = `tigon`, + ['shop'] = 'pdm', + }, + ['toreador'] = { + ['name'] = 'Toreador', + ['brand'] = 'Pegassi', + ['model'] = 'toreador', + ['price'] = 50000, + ['category'] = 'sportsclassic', + ['hash'] = `toreador`, + ['shop'] = 'pdm', + }, + ['tornado'] = { + ['name'] = 'Tornado', + ['brand'] = 'Declasse', + ['model'] = 'tornado', + ['price'] = 21000, + ['category'] = 'sportsclassic', + ['hash'] = `tornado`, + ['shop'] = 'pdm', + }, + ['tornado2'] = { + ['name'] = 'Tornado Gang', + ['brand'] = 'Declasse', + ['model'] = 'tornado2', + ['price'] = 22000, + ['category'] = 'sportsclassic', + ['hash'] = `tornado2`, + ['shop'] = 'pdm', + }, + ['tornado5'] = { + ['name'] = 'Tornado Custom', + ['brand'] = 'Declasse', + ['model'] = 'tornado5', + ['price'] = 22000, + ['category'] = 'sportsclassic', + ['hash'] = `tornado5`, + ['shop'] = 'pdm', + }, + ['toros'] = { + ['name'] = 'Toros', + ['brand'] = 'Pegassi', + ['model'] = 'toros', + ['price'] = 65000, + ['category'] = 'suvs', + ['hash'] = `toros`, + ['shop'] = 'pdm', + }, + ['tribike'] = { + ['name'] = 'Tri Bike', + ['model'] = 'tribike', + ['price'] = 500, + ['category'] = 'cycles', + ['hash'] = `tribike`, + ['shop'] = 'pdm', + }, + ['tribike2'] = { + ['name'] = 'Tri Bike 2', + ['model'] = 'tribike2', + ['price'] = 700, + ['category'] = 'cycles', + ['hash'] = `tribike2`, + ['shop'] = 'pdm', + }, + ['tribike3'] = { + ['name'] = 'Tri Bike 3', + ['model'] = 'tribike3', + ['price'] = 520, + ['category'] = 'cycles', + ['hash'] = `tribike3`, + ['shop'] = 'pdm', + }, + ['tropos'] = { + ['name'] = 'Tropos Rallye', + ['brand'] = 'Lampadati', + ['model'] = 'tropos', + ['price'] = 65000, + ['category'] = 'sports', + ['hash'] = `tropos`, + ['shop'] = 'pdm', + }, + ['tulip'] = { + ['name'] = 'Tulip', + ['brand'] = 'Declasse', + ['model'] = 'tulip', + ['price'] = 80000, + ['category'] = 'muscle', + ['hash'] = `tulip`, + ['shop'] = 'pdm', + }, + ['turismo2'] = { + ['name'] = 'Turismo Classic', + ['brand'] = 'Grotti', + ['model'] = 'turismo2', + ['price'] = 170000, + ['category'] = 'sportsclassic', + ['hash'] = `turismo2`, + ['shop'] = 'pdm', + }, + ['tyrus'] = { + ['name'] = 'Tyrus', + ['brand'] = 'Progen', + ['model'] = 'tyrus', + ['price'] = 230000, + ['category'] = 'super', + ['hash'] = `tyrus`, + ['shop'] = 'pdm', + }, + ['vader'] = { + ['name'] = 'Vader', + ['brand'] = 'Shitzu', + ['model'] = 'vader', + ['price'] = 7200, + ['category'] = 'motorcycles', + ['hash'] = `vader`, + ['shop'] = 'pdm', + }, + ['vagrant'] = { + ['name'] = 'Vagrant', + ['brand'] = 'Maxwell', + ['price'] = 50000, + ['category'] = 'offroad', + ['model'] = 'vagrant', + ['hash'] = `vagrant`, + ['shop'] = 'pdm', + }, + ['vamos'] = { + ['name'] = 'Vamos', + ['brand'] = 'Declasse', + ['model'] = 'vamos', + ['price'] = 30000, + ['category'] = 'muscle', + ['hash'] = `vamos`, + ['shop'] = 'pdm', + }, + ['verus'] = { + ['name'] = 'Verus', + ['brand'] = 'Dinka', + ['price'] = 20000, + ['category'] = 'offroad', + ['model'] = 'verus', + ['hash'] = `verus`, + ['shop'] = 'pdm', + }, + ['vindicator'] = { + ['name'] = 'Vindicator', + ['brand'] = 'Dinka', + ['model'] = 'vindicator', + ['price'] = 19000, + ['category'] = 'motorcycles', + ['hash'] = `vindicator`, + ['shop'] = 'pdm', + }, + ['virgo2'] = { + ['name'] = 'Virgo Custom Classic', + ['brand'] = 'Dundreary', + ['model'] = 'virgo2', + ['price'] = 21000, + ['category'] = 'muscle', + ['hash'] = `virgo2`, + ['shop'] = 'pdm', + }, + ['viseris'] = { + ['name'] = 'Viseris', + ['brand'] = 'Lampadati', + ['model'] = 'viseris', + ['price'] = 210000, + ['category'] = 'sportsclassic', + ['hash'] = `viseris`, + ['shop'] = 'pdm', + }, + ['voltic2'] = { + ['name'] = 'Rocket Voltic', + ['brand'] = 'Coil', + ['model'] = 'voltic2', + ['price'] = 9830400, + ['category'] = 'super', + ['hash'] = `voltic2`, + ['shop'] = 'pdm', + }, + ['vortex'] = { + ['name'] = 'Vortex', + ['brand'] = 'Pegassi', + ['model'] = 'vortex', + ['price'] = 31000, + ['category'] = 'motorcycles', + ['hash'] = `vortex`, + ['shop'] = 'pdm', + }, + ['vstr'] = { + ['name'] = 'V-STR', + ['brand'] = 'Albany', + ['model'] = 'vstr', + ['price'] = 80000, + ['category'] = 'sports', + ['hash'] = `vstr`, + ['shop'] = 'pdm', + }, + ['warrener'] = { + ['name'] = 'Warrener', + ['brand'] = 'Vulcar', + ['model'] = 'warrener', + ['price'] = 4000, + ['category'] = 'sedans', + ['hash'] = `warrener`, + ['shop'] = 'pdm', + }, + ['weevil'] = { + ['name'] = 'Weevil', + ['brand'] = 'BF', + ['model'] = 'weevil', + ['price'] = 9000, + ['category'] = 'compacts', + ['hash'] = `weevil`, + ['shop'] = 'pdm', + }, + ['winky'] = { + ['name'] = 'Winky', + ['brand'] = 'Vapid', + ['price'] = 10000, + ['category'] = 'offroad', + ['model'] = 'winky', + ['hash'] = `winky`, + ['shop'] = 'pdm', + }, + ['wolfsbane'] = { + ['name'] = 'Wolfsbane', + ['brand'] = 'Western', + ['model'] = 'wolfsbane', + ['price'] = 14000, + ['category'] = 'motorcycles', + ['hash'] = `wolfsbane`, + ['shop'] = 'pdm', + }, + ['yosemite2'] = { + ['name'] = 'Yosemite Drift', + ['brand'] = 'Declasse', + ['model'] = 'yosemite2', + ['price'] = 55000, + ['category'] = 'muscle', + ['hash'] = `yosemite2`, + ['shop'] = 'pdm', + }, + ['yosemite3'] = { + ['name'] = 'Yosemite Rancher', + ['brand'] = 'Declasse', + ['price'] = 425000, + ['category'] = 'offroad', + ['model'] = 'yosemite3', + ['hash'] = `yosemite3`, + ['shop'] = 'pdm', + }, + ['youga'] = { + ['name'] = 'Youga', + ['brand'] = 'Bravado', + ['model'] = 'youga', + ['price'] = 8000, + ['category'] = 'vans', + ['hash'] = `youga`, + ['shop'] = 'pdm', + }, + ['youga2'] = { + ['name'] = 'Youga Classic', + ['brand'] = 'Bravado', + ['model'] = 'youga2', + ['price'] = 14500, + ['category'] = 'vans', + ['hash'] = `youga2`, + ['shop'] = 'pdm', + }, + ['youga3'] = { + ['name'] = 'Youga Classic 4x4', + ['brand'] = 'Bravado', + ['model'] = 'youga3', + ['price'] = 15000, + ['category'] = 'vans', + ['hash'] = `youga3`, + ['shop'] = 'pdm', + }, + ['zion3'] = { + ['name'] = 'Zion Classic', + ['brand'] = 'Übermacht', + ['model'] = 'zion3', + ['price'] = 45000, + ['category'] = 'sportsclassic', + ['hash'] = `zion3`, + ['shop'] = 'pdm', + }, + ['zombiea'] = { + ['name'] = 'Zombie Bobber', + ['brand'] = 'Western', + ['model'] = 'zombiea', + ['price'] = 28000, + ['category'] = 'motorcycles', + ['hash'] = `zombiea`, + ['shop'] = 'pdm', + }, + ['zorrusso'] = { + ['name'] = 'Zorrusso', + ['brand'] = 'Pegassi', + ['model'] = 'zorrusso', + ['price'] = 277000, + ['category'] = 'super', + ['hash'] = `zorrusso`, + ['shop'] = 'pdm', }, ----------MUST BE ENABLED FOR THE BELOW VEHICLES-------------+set sv_enforceGameBuild 2372------------------------------- @@ -4422,157 +4422,157 @@ QBShared.Vehicles = { ----------MUST BE ENABLED FOR THE BELOW VEHICLES-------------+set sv_enforceGameBuild 2372------------------------------- ----------MUST BE ENABLED FOR THE BELOW VEHICLES-------------+set sv_enforceGameBuild 2372------------------------------- - ["comet6"] = { - ["name"] = "Comet S2", - ["brand"] = "Pfister", - ["model"] = "comet6", - ["price"] = 230000, - ["category"] = "sports", - ["hash"] = `comet6`, - ["shop"] = "pdm", + ['comet6'] = { + ['name'] = 'Comet S2', + ['brand'] = 'Pfister', + ['model'] = 'comet6', + ['price'] = 230000, + ['category'] = 'sports', + ['hash'] = `comet6`, + ['shop'] = 'pdm', }, - ["remus"] = { - ["name"] = "Remus", - ["brand"] = "Annis", - ["model"] = "remus", - ["price"] = 48000, - ["category"] = "sports", - ["hash"] = `remus`, - ["shop"] = "pdm", + ['remus'] = { + ['name'] = 'Remus', + ['brand'] = 'Annis', + ['model'] = 'remus', + ['price'] = 48000, + ['category'] = 'sports', + ['hash'] = `remus`, + ['shop'] = 'pdm', }, - ["jester4"] = { - ["name"] = "Jester RR", - ["brand"] = "Dinka", - ["model"] = "jester4", - ["price"] = 240000, - ["category"] = "sports", - ["hash"] = `jester4`, - ["shop"] = "pdm", + ['jester4'] = { + ['name'] = 'Jester RR', + ['brand'] = 'Dinka', + ['model'] = 'jester4', + ['price'] = 240000, + ['category'] = 'sports', + ['hash'] = `jester4`, + ['shop'] = 'pdm', }, - ["tailgater2"] = { - ["name"] = "Tailgater S", - ["brand"] = "Obey", - ["model"] = "tailgater2", - ["price"] = 51000, - ["category"] = "sedans", - ["hash"] = `tailgater2`, - ["shop"] = "pdm", + ['tailgater2'] = { + ['name'] = 'Tailgater S', + ['brand'] = 'Obey', + ['model'] = 'tailgater2', + ['price'] = 51000, + ['category'] = 'sedans', + ['hash'] = `tailgater2`, + ['shop'] = 'pdm', }, - ["warrener2"] = { - ["name"] = "Warrener HKR", - ["brand"] = "Vulcar", - ["model"] = "warrener2", - ["price"] = 30000, - ["category"] = "sedans", - ["hash"] = `warrener2`, - ["shop"] = "pdm", + ['warrener2'] = { + ['name'] = 'Warrener HKR', + ['brand'] = 'Vulcar', + ['model'] = 'warrener2', + ['price'] = 30000, + ['category'] = 'sedans', + ['hash'] = `warrener2`, + ['shop'] = 'pdm', }, - ["rt3000"] = { - ["name"] = "RT3000", - ["brand"] = "Dinka", - ["model"] = "rt3000", - ["price"] = 65000, - ["category"] = "sports", - ["hash"] = `rt3000`, - ["shop"] = "pdm", + ['rt3000'] = { + ['name'] = 'RT3000', + ['brand'] = 'Dinka', + ['model'] = 'rt3000', + ['price'] = 65000, + ['category'] = 'sports', + ['hash'] = `rt3000`, + ['shop'] = 'pdm', }, - ["zr350"] = { - ["name"] = "ZR350", - ["brand"] = "Annis", - ["model"] = "zr350", - ["price"] = 38000, - ["category"] = "sports", - ["hash"] = `zr350`, - ["shop"] = "pdm", + ['zr350'] = { + ['name'] = 'ZR350', + ['brand'] = 'Annis', + ['model'] = 'zr350', + ['price'] = 38000, + ['category'] = 'sports', + ['hash'] = `zr350`, + ['shop'] = 'pdm', }, - ["dominator7"] = { - ["name"] = "Dominator ASP", - ["brand"] = "Vapid", - ["model"] = "dominator7", - ["price"] = 110000, - ["category"] = "muscle", - ["hash"] = `dominator7`, - ["shop"] = "pdm", + ['dominator7'] = { + ['name'] = 'Dominator ASP', + ['brand'] = 'Vapid', + ['model'] = 'dominator7', + ['price'] = 110000, + ['category'] = 'muscle', + ['hash'] = `dominator7`, + ['shop'] = 'pdm', }, - ["dominator8"] = { - ["name"] = "Dominator GTT", - ["brand"] = "Vapid", - ["model"] = "dominator8", - ["price"] = 80000, - ["category"] = "muscle", - ["hash"] = `dominator8`, - ["shop"] = "pdm", + ['dominator8'] = { + ['name'] = 'Dominator GTT', + ['brand'] = 'Vapid', + ['model'] = 'dominator8', + ['price'] = 80000, + ['category'] = 'muscle', + ['hash'] = `dominator8`, + ['shop'] = 'pdm', }, - ["euros"] = { - ["name"] = "Euros", - ["brand"] = "Annis", - ["model"] = "euros", - ["price"] = 80000, - ["category"] = "sports", - ["hash"] = `euros`, - ["shop"] = "pdm", + ['euros'] = { + ['name'] = 'Euros', + ['brand'] = 'Annis', + ['model'] = 'euros', + ['price'] = 80000, + ['category'] = 'sports', + ['hash'] = `euros`, + ['shop'] = 'pdm', }, - ["futo2"] = { - ["name"] = "Futo GTX", - ["brand"] = "Karin", - ["model"] = "futo2", - ["price"] = 39000, - ["category"] = "sports", - ["hash"] = `futo2`, - ["shop"] = "pdm", + ['futo2'] = { + ['name'] = 'Futo GTX', + ['brand'] = 'Karin', + ['model'] = 'futo2', + ['price'] = 39000, + ['category'] = 'sports', + ['hash'] = `futo2`, + ['shop'] = 'pdm', }, - ["calico"] = { - ["name"] = "Calico GTF", - ["brand"] = "Karin", - ["model"] = "calico", - ["price"] = 39000, - ["category"] = "sports", - ["hash"] = `calico`, - ["shop"] = "pdm", + ['calico'] = { + ['name'] = 'Calico GTF', + ['brand'] = 'Karin', + ['model'] = 'calico', + ['price'] = 39000, + ['category'] = 'sports', + ['hash'] = `calico`, + ['shop'] = 'pdm', }, - ["sultan3"] = { - ["name"] = "Sultan Classic Custom", - ["brand"] = "Karin", - ["model"] = "sultan3", - ["price"] = 56000, - ["category"] = "sports", - ["hash"] = `sultan3`, - ["shop"] = "pdm", + ['sultan3'] = { + ['name'] = 'Sultan Classic Custom', + ['brand'] = 'Karin', + ['model'] = 'sultan3', + ['price'] = 56000, + ['category'] = 'sports', + ['hash'] = `sultan3`, + ['shop'] = 'pdm', }, - ["vectre"] = { - ["name"] = "Emperor Vectre", - ["brand"] = "Emperor", - ["model"] = "vectre", - ["price"] = 80000, - ["category"] = "sports", - ["hash"] = `vectre`, - ["shop"] = "pdm", + ['vectre'] = { + ['name'] = 'Emperor Vectre', + ['brand'] = 'Emperor', + ['model'] = 'vectre', + ['price'] = 80000, + ['category'] = 'sports', + ['hash'] = `vectre`, + ['shop'] = 'pdm', }, - ["growler"] = { - ["name"] = "Growler", - ["brand"] = "Pfister", - ["model"] = "growler", - ["price"] = 205000, - ["category"] = "sports", - ["hash"] = `growler`, - ["shop"] = "pdm", + ['growler'] = { + ['name'] = 'Growler', + ['brand'] = 'Pfister', + ['model'] = 'growler', + ['price'] = 205000, + ['category'] = 'sports', + ['hash'] = `growler`, + ['shop'] = 'pdm', }, - ["cypher"] = { - ["name"] = "Cypher", - ["brand"] = "Ubermacht", - ["model"] = "cypher", - ["price"] = 155000, - ["category"] = "sports", - ["hash"] = `cypher`, - ["shop"] = "pdm", + ['cypher'] = { + ['name'] = 'Cypher', + ['brand'] = 'Ubermacht', + ['model'] = 'cypher', + ['price'] = 155000, + ['category'] = 'sports', + ['hash'] = `cypher`, + ['shop'] = 'pdm', }, - ["previon"] = { - ["name"] = "Previon", - ["brand"] = "Karin", - ["model"] = "previon", - ["price"] = 149000, - ["category"] = "coupes", - ["hash"] = `previon`, - ["shop"] = "pdm", + ['previon'] = { + ['name'] = 'Previon', + ['brand'] = 'Karin', + ['model'] = 'previon', + ['price'] = 149000, + ['category'] = 'coupes', + ['hash'] = `previon`, + ['shop'] = 'pdm', }, -} +} \ No newline at end of file