> 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/ottos/installation-and-config.md).

# Installation & Config

## Installation

1. Unzip `bs_ottos.pack`
2. Place the `bs_ottos` folder into your `[standalone]` folder in your server `resources` folder.
3. Inside the bs\_ottos folder, open and run the sql file in the `sql` folder.
4. For Qbox, go to `qbx_core/shared/jobs.lua` and add the below:<br>

   ```lua
       ['ottos'] = {
           label = 'Ottos Autos',
           defaultDuty = true,
           offDutyPay = false,
           grades = {
               [0] = {
                   name = 'Salesperson',
                   payment = 50
               },
               [1] = {
                   name = 'Senior Salesperson',
                   payment = 150
               },
               [2] = {
                   name = 'Owner',
                   isboss = true,
                   bankAuth = true,
                   payment = 300
               },
           },
       },
   ```

For QBCore, go to `qb-core/shared/jobs.lua`  and add the below:

```lua
ottos = {
		label = 'Ottos Autos',
		defaultDuty = true,
		offDutyPay = false,
		grades = {
			['0'] = { name = 'Salesperson', payment = 50 },
			['1'] = { name = 'Manager', payment = 75 },
			['2'] = { name = 'Owner', isboss = true, payment = 150 },
		},
	},
```

5. Go to `jg-advancedgarages/config.lua` and add the below to `Config.GarageLocations`:

```lua
["Ottos"] = {
    coords = vec4(807.23, -828.33, 26.34, 271.81),
    spawn = vector4(812.69, -828.73, 25.19, 3.32),
    distance = 15,
    type = "car",
    hideBlip = true,
    blip = {
      id = 357,
      color = 0,
      scale = 0.5
    },
    hideMarkers = true,
    markers = { id = 21, size = { x = 0.3, y = 0.3, z = 0.3 }, color = { r = 255, g = 255, b = 255, a = 120 }, bobUpAndDown = 0, faceCamera = 0, rotate = 1, drawOnEnts = 0 },
  },
```

## Configuration

```lua
Config = {}

-- Framework compatibility: 'qb' = qb-core, 'qbx' = qbx_core (Qbox)
Config.Framework = 'qbx'

-- Target system: 'ox' = ox_target, 'qb' = qb-target
Config.Target = 'ox'

-- Job account banking: 'renewed' = Renewed-Banking, 'qb' = qb-banking, 'okok' = okokBanking, 'fd' = fd_banking, 'tgiann' = tgiann-bank
Config.Banking = 'renewed'

-- Job Configuration (label is read from framework shared jobs by JobName)
Config.JobName = 'ottos'

-- Permissions (minimum job grade level; player grade must be >= this value)
-- Grade levels are defined in framework shared jobs (e.g. 0 = lowest, 1 = next, 2 = owner)
Config.Permissions = {
    purchase = 1, -- Minimum grade to purchase vehicles from players
    sell = 0,     -- Minimum grade to sell vehicles to players
}

-- Dealership Location
Config.Location = {
    coords = vec3(802.89, -823.05, 26.18), -- Adjust to your Otto's location
    heading = 6.93,
    ped = {
        model = 's_m_y_shop_mask',
        coords = vec3(802.89, -823.05, 26.18),
        heading = 6.93
    },
    blip = {
        sprite = 225,
        color = 5,
        scale = 0.8,
        label = 'Otto\'s Cardealer'
    }
}

-- Display Spots for vehicles (add or remove as you like)
Config.DisplaySpots = {
    {
        coords = vec4(808.18, -815.0, 25.55, 89.4),
        label = 'Spot 1'
    },
    {
        coords = vec4(807.93, -811.91, 24.55, 90.96),
        label = 'Spot 2'
    },
    {
        coords = vec4(807.91, -808.86, 24.58, 93.52),
        label = 'Spot 3'
    },
    {
        coords = vec4(808.03, -805.48, 24.59, 90.54),
        label = 'Spot 4'
    },
    {
        coords = vec4(797.87, -805.4, 24.63, 270.89),
        label = 'Spot 5'
    },
    {
        coords = vec4(797.78, -808.59, 24.61, 272.14),
        label = 'Spot 6'
    },
    {
        coords = vec4(797.81, -811.82, 24.55, 271.77),
        label = 'Spot 7'
    },
    {
        coords = vec4(797.97, -815.01, 24.54, 271.41),
        label = 'Spot 8'
    },
    {
        coords = vec4(797.77, -818.26, 24.54, 271.84),
        label = 'Spot 9'
    }
}

-- /ottos command and display vehicles only work inside this zone
Config.OttosZone = {
    name = 'ottos',
    coords = vec3(766, -775, 27.0),
    size = vec3(215.0, 410.0, 115.0),
    rotation = 0.0,
}

-- Lookup by plate: max distance (in meters) from employee to vehicle and to seller
Config.LookupDistance = 10.0

-- Garage ID where sold vehicles are stored (e.g. jg-advancedgarages). Vehicle will be inserted with garage_id = Ottos so buyer can retrieve it from that garage.
Config.OttosGarageId = 'Ottos'

-- Mod labels for purchase and inventory UI
Config.ModLabels = {
    -- Engine: -1 Stock, 0-3 levels
    Engine = {
        [-1] = 'Stock',
        [0] = 'Level 1',
        [1] = 'Level 2',
        [2] = 'Level 3',
        [3] = 'Level 4',
    },
    -- Suspension: -1 Stock, 0-3 levels
    Suspension = {
        [-1] = 'Stock',
        [0] = 'Level 1',
        [1] = 'Level 2',
        [2] = 'Level 3',
        [3] = 'Level 4',
    },
    -- Brakes: -1 Stock, 0-2 levels (Level 1–3)
    Brakes = {
        [-1] = 'Stock',
        [0] = 'Level 1',
        [1] = 'Level 2',
        [2] = 'Level 3',
    },
    -- Transmission: -1 Stock, 0-2 levels (Level 1–3)
    Transmission = {
        [-1] = 'Stock',
        [0] = 'Level 1',
        [1] = 'Level 2',
        [2] = 'Level 3',
    },
    -- Turbo: Installed or not Installed
    Turbo = {
        ['false'] = 'Stock',
        ['true'] = 'Installed',
    },
}

-- Settings
Config.Settings = {
    minPurchasePrice = 100, -- Minimum price when purchasing from players
    maxPurchasePrice = 10000000, -- Maximum price when purchasing from players
    minSalePrice = 100, -- Minimum price when selling to players
    maxSalePrice = 10000000, -- Maximum price when selling to players
    commissionPercent = 3, -- Percentage of sale price given to the worker who sells (0 = none; sale price minus commission goes to job account)
    enableVehicleModifications = true, -- Show vehicle modifications in UI
    refreshInterval = 5000 -- UI refresh interval in ms
}


```
