> For the complete documentation index, see [llms.txt](https://beetle-studios.gitbook.io/beetle-studios-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://beetle-studios.gitbook.io/beetle-studios-docs/beetle-studios/recycle/installation-and-config.md).

# Installation & Config

## Installation

1. Unzip `bs_recycle.pack`
2. Place the `bs_recycle` folder into your `[standalone]` folder in your server `resources` folder.
3. Inside the `bs_recycle` folder, use the <kbd>items.md</kbd> file in the `items` folder to add the items to `ox_inventory/data/items.lua`
4. Also inside the `items` folder, copy and paste the images into the `ox_inventory/web/images` folder
5. Add `bzzz_recycle` to your `standalone` folder
6. (Optional)  Inside the `bs_recycle` folder, use the `sound` folder and place the ogg file into `interact-sound/client/html/sounds`&#x20;
7. (Optional) Edit `interact-sound/fxmanifest.lua` and add `'client/html/sounds/machineworking.ogg',` to the files area
8. (Optional) add `interact-sound`  to start before `bs_recycle` in your `server.cfg`

## Configuration

```lua
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

```
