Scrapyard
Scrapyard
Overview
Scrapyard is a script designed for roleplay servers in GTA V that allows players to engage in scrapyard activities. Players can collect various materials such as metal, scrap, rubber, and glass, which are essential for crafting and missions. The script includes a digital scanner weapon required for specific locator missions, enhancing the gameplay experience by integrating scavenging mechanics into the roleplay environment.
Compatibility
Framework: ESX, QBCore, QBox, Standalone
Target: ox_target, qb-target, or qtarget (optional) — falls back to 3D text / TextUI if none are installed
Dependencies
Required Dependencies
- ox_lib
- es_extended
- ox_inventory
- WEAPON_DIGISCANNER
- drc_scrapyard_props
Optional Dependencies
- oxmysql
- qb-inventory
- ox_target or qb-target or qtarget
- qb-core
Installation
1. Upload the resource
Place the resource folder inside your server's resources directory (rename it to drc_scrapyard if needed).
2. Install dependencies
Make sure all of the following are installed and started before this script:
ox_libes_extendedox_inventory
3. Import database
No SQL file was detected. If this script uses a database, this needs manual review.
4. Add to server.cfg
ensure ox_lib
ensure es_extended
ensure ox_inventory
ensure drc_scrapyard
5. Configure the script
Open the config file and adjust the settings for your server. See the Config section below.
6. Restart and test
Restart your server (or start the resource) and test it in-game, e.g. with /helpscrap.
Config
drc_scrapyardpack/drc_scrapyard/shared/sh_config.lua
Config = {}
Config.Debug = false
Config.Locale = 'en'
Config.HelpItem = 'scrap_help'
Config.Framework = 'ESX' -- auto | ESX | qbcore | standalone
Config.Inventory = 'ox' -- auto-detect | ox | esx | qb | none
Config.NotificationType = "ox_lib" -- Notifications | types: ESX, ox_lib, qbcore
Config.Progress = "ox_lib" -- ProgressBar | types: progressBars, ox_lib, qbcore
Config.TextUI = "ox_lib" -- TextUI | types: ox_lib, esx, luke, GTA
Config.Menu = "ox_lib" -- Menu | types: ox_lib, qb-menu
Config.Target = 'auto' -- auto | ox_target | qb-target | qtarget
Config.InteractionType = "target" -- Interaction mode | types: target, textui, 3dtext
Config.KeySystem = 'none' -- qs, wasabi, fivecode, qbcore
Config.Dispatch = {
enabled = false,
script = "cd_dispatch", -- cd_dispatch, linden_outlawalert, ps-dispatch, custom
chance = {
disassemble = 20, -- chance in percent when removing a vehicle part
crusher = 35 -- chance in percent when starting the crusher
}
}
Config.PoliceJobs = { 'police', 'sheriff' }
Config.PoliceRequired = 0 -- Number of police required to scrap, use crusher or
Config.Blips = {
enabled = true,
scrapyard = {
enabled = true,
sprite = 365,
colour = 5,
scale = 0.85,
shortRange = true
},
crusher = {
enabled = true,
sprite = 566,
colour = 1,
scale = 0.8,
shortRange = true
},
locatorStart = {
enabled = true,
sprite = 326,
colour = 3,
scale = 0.85,
shortRange = true
},
buyer = {
enabled = true,
sprite = 605,
colour = 2,
scale = 0.75,
shortRange = true
}
}
-- here you can find all vehicle classes: https://wiki.rage.mp/wiki/Vehicle_Classes
Config.WreckModels = {
[0] = `prop_rub_carwreck_17`, -- 0 vehicle class prop wreck for that classs
[1] = `prop_rub_carwreck_2`,
[2] = `prop_rub_carwreck_8`,
[3] = `prop_rub_carwreck_2`,
[4] = `prop_rub_carwreck_17`,
[5] = `prop_rub_carwreck_2`,
[6] = `prop_rub_carwreck_8`,
[7] = `prop_rub_carwreck_2`,
[9] = `prop_rub_carwreck_17`,
[10] = `prop_rub_carwreck_2`,
[11] = `prop_rub_carwreck_8`,
[12] = `prop_rub_carwreck_2`,
[17] = `prop_rub_carwreck_17`,
[18] = `prop_rub_carwreck_2`,
[19] = `prop_rub_carwreck_8`,
[20] = `prop_rub_carwreck_2`
}
Config.WreckOffsets = {
[0] = vec3(0.0, 1.75, 0.0),
[1] =vec3(0.0, 1.75, 0.0),
[2] =vec3(0.0, 1.75, 0.0),
[3] =vec3(0.0, 1.75, 0.0),
[4] =vec3(0.0, 1.75, 0.0),
[5] =vec3(0.0, 1.75, 0.0),
[6] =vec3(0.0, 1.75, 0.0),
[7] =vec3(0.0, 1.75, 0.0),
[9] =vec3(0.0, 1.75, 0.0),
[10] =vec3(0.0, 1.75, 0.0),
[11] =vec3(0.0, 1.75, 0.0),
[12] =vec3(0.0, 1.75, 0.0),
[17] = vec3(0.5, 1.5, -1.5), -- bikes need different offset
[18] = vec3(2.5, 2.5, -2.5), -- boats need different offset
[19] = vec3(2.5, 2.5, -2.5), -- boats need different offset
[20] = vec3(2.5, 2.5, -2.5) -- boats need different offset
}
Config.AllowedVehicleClasses = {
[0] = true,
[1] = true,
[2] = true,
[3] = true,
[4] = true,
[5] = true,
[6] = true,
[7] = true,
[9] = true,
[10] = true,
[11] = true,
[12] = true,
[17] = true,
[18] = true,
[19] = true,
[20] = true
}
Config.Scrapyards = {
CanOnlyLocatorVehicles = false, -- If true, only vehicles that were spawned for locator missions can be scrapped. Otherwise, any vehicle can be scrapped.
{
id = 'main_scrapyard',
center = vec3(-424.8291, -1686.8055, 19.0286),
radius = 32.0,
dropoff = {
coords = vec3(-422.2881, -1673.6614, 19.0291),
radius = 0.75
},
crusher = {
enabled = true,
npc = {
model = 's_m_m_dockwork_01',
coords = vec3(-430.4944, -1678.8488, 18.0291),
heading = 254.2851
},
forklift = {
model = 'forklift',
rentDurationMs = 5 * 60 * 1000,
spawn = {
coords = vec3(-425.9178, -1670.5419, 19.0291),
heading = 156.8812
}
},
dropoff = {
coords = vec3(-462.7299, -1709.1974, 18.4340),
heading = 180.8080,
triggerRadius = 5.0,
lockPosition = true
},
machine = {
coords = vec3(-462.7263, -1714.8179, 17.6398),
heading = 358.5675,
control = vec3(-459.9529, -1718.6213, 18.6336),
zone = {
type = 'box',
width = 3.6,
length = 11.0,
minZ = 18.2,
maxZ = 21.6,
heading = 358.5675,
localOffset = vec3(0.0, 5.0, 0.0),
debug = false
}
},
wreck = {
progressMs = 7000,
rewards = {
{ item = 'metal', min = 4, max = 8, chance = 100 },
{ item = 'scrap', min = 2, max = 5, chance = 80 }
}
}
}
}
}
Config.ScrapBuyer = {
enabled = true,
account = 'money', -- money | blackmoney
moneyItem = 'money', -- inventory fallback money item
blackMoneyItem = 'markedbills', -- QB/QBCore black money item fallback
locations = {
{
coords = vec4(-350.1300, -1569.8236, 25.2216, 338.3901),
radius = 1.6,
npc = {
enabled = true,
model = 's_m_m_dockwork_01',
scenario = 'WORLD_HUMAN_CLIPBOARD'
}
}
},
items = {
{ item = 'metal', label = 'Metal', price = 18, icon = 'fa-solid fa-cubes-stacked' },
{ item = 'scrap', label = 'Scrap', price = 12, icon = 'fa-solid fa-recycle' },
{ item = 'rubber', label = 'Rubber', price = 10, icon = 'fa-solid fa-circle' },
{ item = 'glass', label = 'Glass', price = 14, icon = 'fa-solid fa-wine-glass-empty' }
}
}
Config.LocatorMission = {
MissionStart = {
npcLocation = vec4(-400.0506, 1138.3512, 325.8531, 55.4026),
npcModel = 's_m_m_dockwork_01'
},
VehicleModels = {
'blista',
'brioso',
'dilettante',
'issi2',
'panto',
'prairie',
'rhapsody'
},
MissionLocations = {
vec4(353.6303, -1116.6316, 29.4064, 2.4139),
vec4(28.6140, -865.0303, 30.4987, 163.4119),
vec4(-168.2436, -1436.6215, 31.2511, 231.2457),
vec4(828.1843, -1258.3951, 26.2781, 1.8534),
vec4(901.5261, -68.0688, 78.7624, 58.5737),
vec4(-49.8067, 214.7430, 106.5450, 165.7220),
vec4(-1186.5050, -743.2142, 19.9413, 130.6973),
vec4(-1318.5322, -1137.7690, 4.3516, 273.6900),
vec4(-1006.2433, -1632.7238, 4.5240, 235.7077),
}
}
Config.OwnershipCheck = {
enabled = true,
allowCrusherOwnedVehicles = false, -- If true, player-owned vehicles can be crushed and will be removed from the ownership database.
deleteOwnedVehicleOnCrusher = true,
useStateBag = true,
stateBagKeys = {
'owner',
'owned',
'vehicleid',
'citizenid',
'garageOwner'
},
useDatabase = true,
databaseResource = 'oxmysql',
tableCandidates = {
{ name = 'owned_vehicles', plateColumn = 'plate' },
{ name = 'player_vehicles', plateColumn = 'plate' },
{ name = 'owned_cars', plateColumn = 'plate' }
}
}
Config.PartOrder = {
'door_lf',
'door_rf',
'door_lr',
'door_rr',
'hood',
'trunk',
'engine',
'wheel_lf',
'wheel_rf',
'wheel_lr',
'wheel_rr',
'windshield'
}
-- IMPORTANT:
-- 1) Change target.fallbackOffset for where circle target is shown on vehicle.
-- 2) Change carry.model and carry.offset/rotation for prop in player hand.
Config.Parts = {
door_lf = {
label = 'Door',
icon = 'fa-solid fa-door-open',
rewardKey = 'door',
target = {
bone = 'door_dside_f',
fallbackOffset = vec3(-1.05, 1.12, 0.25)
},
remove = {
type = 'door',
doorIndex = 0
},
carry = {
model = 'prop_car_door_01',
bone = 57005,
offset = vec3(0.6, -0.5, -0.1),
rotation = vec3(-130.0, 70.0, 0.0)
}
},
door_rf = {
label = 'Door',
icon = 'fa-solid fa-door-open',
rewardKey = 'door',
target = {
bone = 'door_pside_f',
fallbackOffset = vec3(1.05, 1.12, 0.25)
},
remove = {
type = 'door',
doorIndex = 1
},
carry = {
model = 'prop_car_door_01',
bone = 57005,
offset = vec3(0.6, -0.5, -0.1),
rotation = vec3(-130.0, 70.0, 0.0)
}
},
door_lr = {
label = 'Door',
icon = 'fa-solid fa-door-open',
rewardKey = 'door',
target = {
bone = 'door_dside_r',
fallbackOffset = vec3(-1.05, -0.92, 0.25)
},
remove = {
type = 'door',
doorIndex = 2
},
carry = {
model = 'prop_car_door_01',
bone = 57005,
offset = vec3(0.6, -0.5, -0.1),
rotation = vec3(-130.0, 70.0, 0.0)
}
},
door_rr = {
label = 'Door',
icon = 'fa-solid fa-door-open',
rewardKey = 'door',
target = {
bone = 'door_pside_r',
fallbackOffset = vec3(1.05, -0.92, 0.25)
},
remove = {
type = 'door',
doorIndex = 3
},
carry = {
model = 'prop_car_door_01',
bone = 57005,
offset = vec3(0.6, -0.5, -0.1),
rotation = vec3(-130.0, 70.0, 0.0)
}
},
hood = {
label = 'Hood',
icon = 'fa-solid fa-car-side',
target = {
bone = 'bonnet',
fallbackOffset = vec3(0.0, 1.55, 0.45)
},
remove = {
type = 'door',
doorIndex = 4
},
carry = {
model = 'prop_car_bonnet_02',
bone = 57005,
offset = vec3(1.0, -0.3, 0.2),
rotation = vec3(20.0, -110.0, 190.0)
}
},
trunk = {
label = 'Trunk',
icon = 'fa-solid fa-box-open',
rewardKey = 'hood',
target = {
bone = 'boot',
fallbackOffset = vec3(0.0, -1.55, 0.45)
},
remove = {
type = 'door',
doorIndex = 5
},
carry = {
model = 'imp_prop_impexp_trunk_01a',
bone = 57005,
offset = vec3(0.7, -0.3, -0.1),
rotation = vec3(40.0, 80.0, 170.0)
}
},
engine = {
label = 'Engine',
icon = 'fa-solid fa-gears',
target = {
bone = 'engine',
fallbackOffset = vec3(0.0, 1.08, 0.52)
},
remove = {
type = 'engine'
},
carry = {
model = 'prop_car_engine_01',
bone = 57005,
offset = vec3(0.6, 0.4, -0.2),
rotation = vec3(-140.0, 80.0, -20.0)
}
},
wheel_lf = {
label = 'Wheel',
icon = 'fa-solid fa-circle',
rewardKey = 'wheel',
target = {
bone = 'wheel_lf',
fallbackOffset = vec3(-1.02, 1.30, -0.12)
},
remove = {
type = 'wheel',
wheelIndex = 0
},
carry = {
model = 'prop_wheel_01',
bone = 57005,
offset = vec3(0.3, 0.0, -0.2),
rotation = vec3(-140.0, 80.0, 0.0)
}
},
wheel_rf = {
label = 'Wheel',
icon = 'fa-solid fa-circle',
rewardKey = 'wheel',
target = {
bone = 'wheel_rf',
fallbackOffset = vec3(1.02, 1.30, -0.12)
},
remove = {
type = 'wheel',
wheelIndex = 1
},
carry = {
model = 'prop_wheel_01',
bone = 57005,
offset = vec3(0.3, 0.0, -0.2),
rotation = vec3(-140.0, 80.0, 0.0)
}
},
wheel_lr = {
label = 'Wheel',
icon = 'fa-solid fa-circle',
rewardKey = 'wheel',
target = {
bone = 'wheel_lr',
fallbackOffset = vec3(-1.02, -1.18, -0.12)
},
remove = {
type = 'wheel',
wheelIndex = 2
},
carry = {
model = 'prop_wheel_01',
bone = 57005,
offset = vec3(0.3, 0.0, -0.2),
rotation = vec3(-140.0, 80.0, 0.0)
}
},
wheel_rr = {
label = 'Wheel',
icon = 'fa-solid fa-circle',
rewardKey = 'wheel',
target = {
bone = 'wheel_rr',
fallbackOffset = vec3(1.02, -1.18, -0.12)
},
remove = {
type = 'wheel',
wheelIndex = 3
},
carry = {
model = 'prop_wheel_01',
bone = 57005,
offset = vec3(0.3, 0.0, -0.2),
rotation = vec3(-140.0, 80.0, 0.0)
}
},
windshield = {
label = 'Windshield',
icon = 'fa-solid fa-wind',
target = {
bone = 'windscreen',
fallbackOffset = vec3(0.0, 0.55, 0.86)
},
remove = {
type = 'front_windshield',
windowIndex = 6
}
}
}
-- Rewards setup (editable)
Config.Reward = {
fallback = {
instant = false,
rewards = {
{ item = 'metal', min = 1, max = 2, chance = 100 }
}
},
parts = {
door = {
instant = false,
rewards = {
{ item = 'metal', min = 3, max = 6, chance = 100 },
{ item = 'scrap', min = 1, max = 2, chance = 50 }
}
},
hood = {
instant = false,
rewards = {
{ item = 'metal', min = 4, max = 7, chance = 100 },
{ item = 'scrap', min = 1, max = 3, chance = 60 }
}
},
engine = {
instant = false,
rewards = {
{ item = 'metal', min = 5, max = 8, chance = 100 },
{ item = 'scrap', min = 2, max = 4, chance = 70 }
}
},
wheel = {
instant = false,
rewards = {
{ item = 'rubber', min = 2, max = 4, chance = 100 },
{ item = 'metal', min = 1, max = 3, chance = 70 }
}
},
windshield = {
instant = true,
rewards = {
{ item = 'glass', min = 1, max = 2, chance = 100 }
}
}
}
}