> For the complete documentation index, see [llms.txt](https://devmosaic.gitbook.io/devmosaic/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://devmosaic.gitbook.io/devmosaic/resources/devmosaic-dm-hustling/configuration.md).

# Configuration

You can customize almost every layout value, wording, and action using config.lua.

Main configuration is in:

```
config.lua
```

### Debug

```lua
Config.Debug = false
```

Set to `true` to print extra debug information in the console.

### UI Locale

```lua
Config.UI = {
    locale = 'en'
}
```

The locale must match a file in the `locales` folder, without `.json`.

Examples:

```lua
locale = 'en'
locale = 'ar'
locale = 'fr'
locale = 'pt-br'
```

### Contact NPC

```lua
Config.Contact = {
    model = 'a_m_y_business_03',
    spawns = {
        vector4(110.29, -1800.15, 26.08, 136.21),
    }
}
```

`model` is the NPC model used for the starter contact.

`spawns` is a list of possible contact locations. One location is selected when the resource starts.

### Buyer NPCs

```lua
Config.Buyer.models = {
    'a_m_m_eastsa_02',
    'a_m_m_salton_02',
}
```

These models are randomly used for buyer and driver NPCs.

### Buyer Meet Locations

Buyer meet locations are configured in:

```lua
Config.Buyer.meets = {
    {
        spot = vector4(201.94, -1863.15, 25.88, 230.21),
        vehicle = {
            coords = vector3(201.94, -1863.15, 25.88),
            heading = 230.21,
            models = {'burrito3', 'rumpo', 'youga'}
        },
        repNeeded = 0
    },
}
```

Fields:

* `spot`: where the player is sent for the buyer interaction.
* `vehicle.coords`: where the buyer vehicle spawns.
* `vehicle.heading`: vehicle heading.
* `vehicle.models`: random vehicle model list.
* `repNeeded`: minimum player reputation required to unlock this location.

Use van-style vehicles with usable seats and doors.

### Pacing

```lua
Config.Pacing = {
    searchDelay = {min = 5, max = 8},
    cooldownMinutes = 30,
    limits = {
        travel = 300,
        showcase = 120,
        deal = 60
    }
}
```

Fields:

* `searchDelay`: seconds the contact takes to find a buyer.
* `cooldownMinutes`: cooldown after a hustle ends. Use `0` to disable.
* `travel`: seconds to reach the buyer.
* `showcase`: seconds to show goods.
* `deal`: seconds to accept, decline, or negotiate.

### Bargaining

```lua
Config.Bargaining = {
    attempts = 2,
    markup = {min = 1.10, max = 1.30},
    repWeight = 0.001
}
```

Fields:

* `attempts`: how many times a player can negotiate.
* `markup`: buyer acceptance range above the current offer.
* `repWeight`: extra acceptance value gained from reputation.

### Danger

```lua
Config.Danger = {
    setup = {
        odds = 100,
        arsenal = {
            'WEAPON_PISTOL',
            'WEAPON_MICROSMG',
            'WEAPON_PUMPSHOTGUN'
        }
    },
    heatOdds = 30,
    dispatch = {
        code = '10-66'
    }
}
```

Fields:

* `setup.odds`: robbery chance when negotiation fails.
* `setup.arsenal`: weapons buyers can use during robbery.
* `heatOdds`: police alert chance after a successful sale.
* `dispatch.code`: dispatch code shown by supported dispatch systems.

### Reputation

```lua
Config.Standing = {
    enabled = true,
    perSale = {min = 1, max = 5},
    priceBonus = 0.05,
}
```

Reputation can:

* Unlock higher-tier buyer locations.
* Increase sale prices.
* Reduce robbery chance.
* Reduce buyer search time.
* Reduce police alert chance.
