Installation & Config
Install and configure Recycle
Installation
- Unzip
bs_recycle.pack - Place the
bs_recyclefolder into your[standalone]folder in your serverresourcesfolder. - Inside the
bs_recyclefolder, use the <kbd>items.md</kbd> file in theitemsfolder to add the items toox_inventory/data/items.lua - Also inside the
itemsfolder, copy and paste the images into theox_inventory/web/imagesfolder - Add
bzzz_recycleto yourstandalonefolder - (Optional) Inside the
bs_recyclefolder, use thesoundfolder and place the ogg file intointeract-sound/client/html/sounds - (Optional) Edit
interact-sound/fxmanifest.luaand add'client/html/sounds/machineworking.ogg',to the files area - (Optional) add
interact-soundto start beforebs_recyclein yourserver.cfg
Configuration
Config = {}
-- ========== PICKUP OBJECTS (world props) ==========
-- When a player interacts with these models on the map, they receive the given item.
-- Add or remove entries; ensure the item exists in ox_inventory data/items.lua
Config.PickupObjects = {
-- Paint cans
{ model = 'prop_paints_can01', item = 'scrap_paintcan', label = 'Paint Can' },
{ model = 'prop_paints_can02', item = 'scrap_paintcan', label = 'Paint Can' },
{ model = 'prop_paints_can03', item = 'scrap_paintcan', label = 'Paint Can' },
{ model = 'prop_paints_can04', item = 'scrap_paintcan', label = 'Paint Can' },
{ model = 'prop_paints_can05', item = 'scrap_paintcan', label = 'Paint Can' },
{ model = 'prop_paints_can06', item = 'scrap_paintcan', label = 'Paint Can' },
{ model = 'prop_paints_can07', item = 'scrap_paintcan', label = 'Paint Can' },
{ model = 'ng_proc_paintcan01a', item = 'scrap_paintcan', label = 'Paint Can' },
{ model = 'ng_proc_paintcan02a', item = 'scrap_paintcan', label = 'Paint Can' },
-- Oil tubs
{ model = 'prop_oiltub_01', item = 'scrap_oiltub', label = 'Oil Tub' },
{ model = 'prop_oiltub_02', item = 'scrap_oiltub', label = 'Oil Tub' },
{ model = 'prop_oiltub_03', item = 'scrap_oiltub', label = 'Oil Tub' },
{ model = 'prop_oiltub_05', item = 'scrap_oiltub', label = 'Oil Tub' },
-- Tires
{ model = 'prop_wheel_tyre', item = 'scrap_tire', label = 'Tire' },
{ model = 'prop_dock_ropetyre3', item = 'scrap_tire', label = 'Tire' },
{ model = 'prop_rub_tyre_01', item = 'scrap_tire', label = 'Tire' },
{ model = 'prop_rub_tyre_03', item = 'scrap_tire', label = 'Tire' },
{ model = 'prop_rub_tyre_dam1', item = 'scrap_tire', label = 'Tire' },
{ model = 'prop_rub_tyre_02', item = 'scrap_tire', label = 'Tire' },
{ model = 'prop_rub_tyre_dam2', item = 'scrap_tire', label = 'Tire' },
{ model = 'ng_proc_tyre_01', item = 'scrap_tire', label = 'Tire' },
{ model = 'ng_proc_tyre_dam1', item = 'scrap_tire', label = 'Tire' },
-- Monitors
{ model = 'prop_rub_monitor', item = 'scrap_monitor', label = 'Monitor' },
-- Barrels
{ model = 'prop_rad_waste_barrel_01', item = 'scrap_barrel', label = 'Barrel' },
{ model = 'prop_barrel_03a', item = 'scrap_barrel', label = 'Barrel' },
{ model = 'prop_barrel_03d', item = 'scrap_barrel', label = 'Barrel' },
{ model = 'prop_barrel_01a', item = 'scrap_barrel', label = 'Barrel' },
{ model = 'prop_barrel_exp_01c', item = 'scrap_barrel', label = 'Barrel' },
{ model = 'prop_offroad_barrel01', item = 'scrap_barrel', label = 'Barrel' },
{ model = 'prop_barrel_pile_03', item = 'scrap_barrel', label = 'Barrel' },
{ model = 'prop_barrel_pile_05', item = 'scrap_barrel', label = 'Barrel' },
{ model = 'prop_barrel_pile_04', item = 'scrap_barrel', label = 'Barrel' },
-- Boxes
{ model = 'prop_cs_cardbox_01', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'prop_cs_rub_box_01', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'prop_cs_clothes_box', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ret_ta_box', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ind_cf_chckbox2', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ind_cs_box01', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ind_cfbox', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ind_cfbox2', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ind_ss_box02', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_serv_crdbox_2', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ind_ss_box04', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ret_gc_box2', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ind_cs_box02', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ind_ss_box03', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'v_ind_ss_box01', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'prop_skid_box_05', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'prop_skid_box_02', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'prop_skid_box_03', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'prop_skid_box_04', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'prop_skid_box_01', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'prop_skid_box_06', item = 'scrap_box', label = 'Cardboard Box' },
{ model = 'prop_skid_box_07', item = 'scrap_box', label = 'Cardboard Box' },
}
-- Time (ms) to pick up - kept short so pickup anim plays once
Config.PickupDuration = 1500
-- ========== RECYCLE ZONES ==========
-- At these locations players can convert picked-up items into materials.
-- Each zone can have optional blip and custom label.
-- Prop model spawned on the ground at each scrap zone (set to false to disable).
Config.ScrapZoneProp = 'bzzz_prop_recycler_c'
-- "On" model shown when recycler stash has scrappable items (Recycle Items active).
Config.ScrapZonePropActive = 'bzzz_prop_recycler_a'
Config.ScrapZones = {
{
coords = vec3(-527.05, -1706.18, 18.32),
size = vec3(3.0, 3.0, 3.0),
rotation = 245.55,
label = 'Scrap Materials',
blip = {
enabled = true,
sprite = 380,
color = 5,
scale = 0.8,
label = 'Scrap Yard',
},
},
{
coords = vec3(2351.5, 3132.96, 48.2),
size = vec3(2.5, 2.5, 2.5),
rotation = 0.0,
label = 'Scrap Materials',
blip = {
enabled = false,
},
},
-- Example: another location (e.g. recycling center)
-- {
-- coords = vec3(0.0, 0.0, 0.0),
-- size = vec3(2.0, 2.0, 2.0),
-- rotation = 0.0,
-- label = 'Recycle Here',
-- blip = { enabled = true, sprite = 365, color = 2, scale = 0.8, label = 'Recycle' },
-- },
}
-- Time (ms) to scrap one item into materials
Config.ScrapDuration = 4000
-- Recycler stash (items moved here are scrapped via "Recycle Items")
Config.RecyclerStashSlots = 20
Config.RecyclerStashWeight = 100000
-- Recycler "machine" sound during **Recycle Items** — **interact-sound** only (no built-in NUI).
-- Put the .ogg in `interact-sound/client/html/sounds/` and list it in interact-sound `fxmanifest.lua` → `files`.
-- `ensure interact-sound` before `bs_recycle`.
Config.RecyclerInteractSound = true
Config.RecyclerInteractSoundFile = 'machineworking'
Config.RecyclerInteractSoundVolume = 0.5 -- same ballpark as bs_coppertheft wire_cut
-- Sound timing follows **Config.ScrapDuration** (one play per item; spans the recycle progress bar)
-- ========== SCRAP OUTPUT ==========
-- For each item type, define what materials are given when scrapping (item name, min, max amount).
-- These item names must exist in ox_inventory.
Config.ScrapOutput = {
scrap_paintcan = {
{ item = 'scrap_metal', min = 1, max = 4 },
{ item = 'scrap_plastic', min = 1, max = 3 },
},
scrap_oiltub = {
{ item = 'scrap_plastic', min = 2, max = 6 },
},
scrap_tire = {
{ item = 'scrap_rubber', min = 2, max = 6 },
},
scrap_monitor = {
{ item = 'scrap_electronics', min = 2, max = 6 },
{ item = 'scrap_plastic', min = 2, max = 6 },
{ item = 'scrap_metal', min = 2, max = 6 },
},
scrap_barrel = {
{ item = 'scrap_metal', min = 2, max = 6 },
},
scrap_box = {
{ item = 'scrap_cardboard', min = 2, max = 6 },
},
}
-- Debug: draw scrap zone outlines
Config.DebugZones = false