# Adjustments Config (/docs/es_extended/config/adjustments)

`shared/config/adjustments.lua` holds client-side game tweaks that es_extended applies when a player has loaded: PvP, wanted level, dispatch, NPC scenarios, population density, HUD components, number plates for AI traffic and Discord Rich Presence. Change them to tune the feel of the world without writing a separate resource.

## Overview [#overview]

| Fact | Value |
| --- | --- |
| File | `es_extended/shared/config/adjustments.lua` |
| Applied by | `client/modules/adjustments/*.lua` on `esx:playerLoaded` |
| Side | Client (file is shared) |
| Apply changes | Restart the server; players must reconnect |

## Toggles [#toggles]

| Key | Type | Default | Effect when enabled |
| --- | --- | --- | --- |
| `DisableHealthRegeneration` | `boolean` | `false` | Sets the health recharge multiplier to `0`. |
| `DisableVehicleRewards` | `boolean` | `false` | Players no longer get weapons from entering police or military vehicles. Runs every frame. |
| `DisableNPCDrops` | `boolean` | `false` | NPCs no longer drop carbine rifle, pistol and pump shotgun pickups. |
| `DisableDispatchServices` | `boolean` | `true` | Turns off all 15 AI dispatch services and the police scanner. |
| `DisableScenarios` | `boolean` | `true` | Disables a list of world vehicle scenarios (parked and driving AI vehicles, police cars, boats, planes) and paparazzi. |
| `DisableAimAssist` | `boolean` | `false` | Sets free-aim targeting mode, mainly affects controller players. |
| `DisableVehicleSeatShuff` | `boolean` | `false` | Stops the automatic shuffle from passenger to driver seat. |
| `DisableDisplayAmmo` | `boolean` | `false` | Hides the ammo counter. Runs every frame. |
| `EnablePVP` | `boolean` | `true` | Allows players to damage each other (friendly fire). |
| `EnableWantedLevel` | `boolean` | `false` | Keeps the normal GTA wanted level. When `false`, ESX clears it and sets the maximum to `0`. |

<Callout type="info">
The key is spelled `DisableVehicleSeatShuff` (without the final "le"). Use it exactly like that.
</Callout>

## RemoveHudComponents [#removehudcomponents]

A list indexed by HUD component ID. `true` hides the component.

| ID | Component | Default |
| --- | --- | --- |
| 1 | Wanted stars | `false` |
| 2 | Weapon icon | `false` |
| 3 | Cash | `false` |
| 4 | MP cash | `false` |
| 5 | MP message | `false` |
| 6 | Vehicle name | `true` |
| 7 | Area name | `true` |
| 8 | Vehicle class | `true` |
| 9 | Street name | `true` |
| 10 | Help text | `false` |
| 11 | Floating help text 1 | `false` |
| 12 | Floating help text 2 | `false` |
| 13 | Cash change | `false` |
| 14 | Reticle | `false` |
| 15 | Subtitle text | `false` |
| 16 | Radio stations | `false` |
| 17 | Saving game | `false` |
| 18 | Game stream | `false` |
| 19 | Weapon wheel | `false` |
| 20 | Weapon wheel stats | `false` |
| 21 | HUD components | `false` |
| 22 | HUD weapons | `false` |

Setting `[16] = true` also turns the vehicle radio off and disables radio control whenever the player enters a vehicle.

## Multipliers [#multipliers]

Population density, applied every frame on each client.

| Key | Default | Native |
| --- | --- | --- |
| `pedDensity` | `1.0` | `SetPedDensityMultiplierThisFrame` |
| `scenarioPedDensityInterior` | `0.0` | `SetScenarioPedDensityMultiplierThisFrame` (interior) |
| `scenarioPedDensityExterior` | `1.0` | `SetScenarioPedDensityMultiplierThisFrame` (exterior) |
| `ambientVehicleRange` | `1.0` | `SetAmbientVehicleRangeMultiplierThisFrame` |
| `parkedVehicleDensity` | `1.0` | `SetParkedVehicleDensityMultiplierThisFrame` |
| `randomVehicleDensity` | `1.0` | `SetRandomVehicleDensityMultiplierThisFrame` |
| `vehicleDensity` | `1.0` | `SetVehicleDensityMultiplierThisFrame` |

```lua title="shared/config/adjustments.lua"
Config.Multipliers = {
    pedDensity = 0.6,
    scenarioPedDensityInterior = 0.0,
    scenarioPedDensityExterior = 0.6,
    ambientVehicleRange = 1.0,
    parkedVehicleDensity = 0.5,
    randomVehicleDensity = 0.5,
    vehicleDensity = 0.5,
}
```

### Changing density at runtime [#changing-density-at-runtime]

The client also listens to the global state bag `esx:populationDensity`. A server resource can set it to override `pedDensity`, `vehicleDensity` and `randomVehicleDensity` for everyone, for example during an event. Values must be between `0` and `1`. When `pedDensity` is set, it also replaces both scenario ped values; when `vehicleDensity` is set, it also replaces `parkedVehicleDensity`.

```lua title="server/events.lua"
GlobalState["esx:populationDensity"] = { pedDensity = 0.2, vehicleDensity = 0.1, randomVehicleDensity = 0.1 }

-- back to Config.Multipliers
GlobalState["esx:populationDensity"] = nil
```

## CustomAIPlates [#customaiplates]

| Type | Default |
| --- | --- |
| `string` | `"........"` |

Number plate pattern for AI vehicles, passed to `SetDefaultVehicleNumberPlateTextPattern`.

| Character | Result |
| --- | --- |
| `1` | random digit 0-9 |
| `A` | random letter A-Z |
| `.` | random letter or digit (50/50) |
| `^1` | a literal `1` |
| `^A` | a literal `A` |
| anything else | that character |

Patterns shorter than 8 characters are padded on the right.

```lua
Config.CustomAIPlates = "LS^A 1111" -- e.g. "LSA 4821"
```

## DiscordActivity [#discordactivity]

Discord Rich Presence for every player. Disabled while `appId` is `0`.

| Key | Type | Default | Description |
| --- | --- | --- | --- |
| `appId` | `number` | `0` | Discord application ID. |
| `assetName` | `string` | `"LargeIcon"` | Name of the large image asset uploaded to the application. |
| `assetText` | `string` | `"{server_name}"` | Hover text of the image. |
| `buttons` | `table[]` | Join and Discord buttons | Up to two `{ label, url }` entries. |
| `presence` | `string` | `"{player_name} [{player_id}] \| {server_players}/{server_maxplayers}"` | Status text. |
| `refresh` | `number` | `60000` | Update interval in milliseconds. |

Placeholders you can use in `presence`, `assetText` and button URLs:

| Placeholder | Value |
| --- | --- |
| `{server_name}` | `sv_projectName` convar |
| `{server_endpoint}` | server IP and port |
| `{server_players}` | current player count |
| `{server_maxplayers}` | `sv_maxClients` |
| `{player_name}` | FiveM name |
| `{player_rp_name}` | character name |
| `{player_id}` | server ID |
| `{player_street}` | current street name |

```lua
Config.DiscordActivity = {
    appId = 123456789012345678,
    assetName = "logo",
    assetText = "{server_name}",
    buttons = {
        { label = "Join Server", url = "fivem://connect/{server_endpoint}" },
        { label = "Discord", url = "https://discord.gg/yourserver" },
    },
    presence = "{player_rp_name} | {server_players}/{server_maxplayers}",
    refresh = 60 * 1000,
}
```

## Related [#related]

- [Main config](/docs/es_extended/config)
- [Weapons config](/docs/es_extended/config/weapons)
- [Performance guide](/docs/guides/performance)
- [Client events](/docs/es_extended/events/client)
