# Welcome

The hub of documentation for LG Mods Products

### Thank you for choosing a LG Mods Product

Firstly, thank you for using an LG Mods product on your FiveM server. We aim to provide high quality modifications to assist with improving the British experience within your community.

This GitBook is designed to allow you to understand the different LG Mods Products and how to configure them or set them up. Some of the instructions here may require additional software or some understanding of GTA/FiveM modding, but we hope to make it as easy for you to understand as possible.


# UK Sinner Street

## Product Information

Purchase - [Tebex Store - UK Police Station (Sinner Street)](https://store.lgmods.co.uk)

Sinner Street PD is an exterior and interior overhaul to the original Los Santos Police Station on Sinner Street, within the GTA5 game world. It includes a number of additional rooms, a revamped custody suite and many other features all resembling that of a British based police station. This also includes functioning front and rear gates, which can be opened via a command.&#x20;

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

## Contents

<table data-full-width="false"><thead><tr><th width="226">File/[Folder]</th><th width="289">Information</th><th>Required to be configured?</th><th data-hidden></th></tr></thead><tbody><tr><td>[client]</td><td>Folder containing encrypted scripts for multiple functions within the police station</td><td>No - Do not edit</td><td></td></tr><tr><td>[html]</td><td>Folder containing files for the panel UI, audio etc.</td><td>No - Do not edit</td><td></td></tr><tr><td>[stream]</td><td>Folder containing the model and textures used to replace the original content</td><td>Optional - see <a href="#configuration">configuration</a></td><td></td></tr><tr><td>.fxap</td><td>A FiveM file required to be included within the resource folder for the modification to load</td><td>No - Do not edit</td><td></td></tr><tr><td>config.lua</td><td>Configuration for the modification. You can modify the way the gate works including any whitelisting for who can open the gate.  Read the comments to see what can or cannot be edited</td><td>Optional - see <a href="#configuration">configuration</a></td><td></td></tr><tr><td>doortuning.ymt</td><td>Files to manage the gates. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>fxmanifest.lua</td><td>FiveM config file to determine what files need to be loaded/streamed. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>gta5.meta</td><td>File required to manage how certain parts of the addon works. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>interiorproxies.meta</td><td>File required to manage how certain parts of the addon works. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>server.lua</td><td>Encrypted script that has functions that link in with other elements of the addon</td><td>No - Do not edit</td><td></td></tr></tbody></table>

{% hint style="danger" %}
Unless specifically mentioned, do not edit the files unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.
{% endhint %}

## Installation

{% hint style="info" %}
These instructions assume you have a working FiveM server that you can already connect to without issue. Please see [here](https://docs.fivem.net/docs/server-manual/setting-up-a-server/) for more information on setting up a FiveM server.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation. It should be in the same location as your server.cfg.&#x20;
2. Download the LG Mods product from your [FiveM Keymaster](https://keymaster.fivem.net/), if you haven't already.
3. Extract the files from the ZIP archive you downloaded into the 'Resources' folder.
4. The folder inside the 'Resources' folder should be 'LGMods\_Sinner\_UK' and within it you see the files listed above.&#x20;

{% hint style="info" %}
If you find another folder inside the LGMods\_Sinner\_UK folder, then you need to make sure the contents are moved so that the files above are within the first directory you open from the resources folder, otherwise the addon will not load
{% endhint %}

5. Open your server.cfg and find where you see a number of lines that start with the word 'ensure'.  The default resources are usually included and appear like below.&#x20;

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
```

6. Below these lines is where you will add this resource with the following line

```
ensure LGMods_Sinner_UK
```

7. Restart your server. Some resources can be loaded while the server is running using the start command, however MLO's usually don't work using this method as such you will need to restart your server for this product.

{% hint style="info" %}
All players that join must 'stream' the asset to their computer for the first time they connect to the server and go near to where the product is located. FiveM and GTA then cache what is downloaded. Depending on the server and clients internet connection, it may take a short while for the assets to stream and therefore parts of the product may not load as quick as others. Please be patient while this loads.&#x20;
{% endhint %}

## Features

In a recent update to Sinner Street, we have made it so the rear gate is for inbound traffic only. That is, you cannot exit via this gate and instead must drive around the side of the station to use the front gate. However, there maybe cases where this is not suitable due to an emergency. On the wall of the police station is a red button, which when pressed opens the gate. It will also sound an alarm, to prevent misuse and alert to anyone using it who maybe trying to escape the secure area.

To reset this alarm, go into the building through the rear doors and go onto the stairs leading down to custody. You will find an alarm panel on the wall. You can reset the alarm and gate status at this panel by pressing E next to it.

## Configuration

Configuration of this product can be done within the file 'config.lua'. No other files should be edited.

### ESX/QBCore Whitelisting Settings

The next and final part that can be configured is the ESX/ ESX-Legacy / QBCore job whitelisting settings, found further down 'config.lua'.

If you are using ESX, ESX-Legacy or QBCore and have whitelisted roles which you want to be able to open the gate then include them here. 'police' and 'ems' have already been placed as an example, but change these to match your ESX/ESX-Legacy/QBCore configuration.&#x20;

Change value from false to true after enabled if you are wishing to use that frameworks whitelisting. If both are left false then anyone can run the command to open the gates.

{% hint style="warning" %}
ESX and QBCore are third party resources and are not included with this LGMods product, and we are unable to assist with their setup.

Only enable these options **if you have the framework installed**. Doing so without the framework being installed correctly is likely to cause errors with this script. Otherwise pick standalone.

Be careful to ensure each entry within the jobs array has apostrophes around the job role and a comma is placed after them, with exception to the last entry.
{% endhint %}

```lua
Config = {}

Config.Framework = 'standalone' -- Accepted values are standalone, oEssentials, PoliceEssentials, QBCore, ESX, ESX-Legacy. If you are using ESX please remove "--" from the start of Line 18 in fxmanifest.

Config.AllowedJobs = { -- This is only checked when Framework is set to QBCore or ESX.
    "Job1",
    "Job2"
}
```

### Front Gate Settings

Additional to the whitelisting (if you chose to use it) you can also set a pin for opening the gates. Users can go up to a keypad and press E to open the 4 digit pinpad. They will need to enter the code below. This pin is the same for all pin pads. If you prefer to use whitelisting only, change CodeRequired to **false**.

GateCode is the code you can change - noting it must only be 4 numerical digits.

The two commands are not required to be used and should not be changed.

```lua
Config.CodeRequired = true -- If set to true, despite the user being authorised above they will need a code.
Config.GateCode = 1234 -- MAXIMUM OF 4 CHARACTERS

Config.GateCommand = "sinnersgate"
Config.ResetCommand = "resetalarm" -- Command to reset the alarm
```

The GateIncrement and PedGateIncrement are two variables that set the animation of the front and pedestrian gates. You should not need to edit these.

SoundRadius is how far the audio can be heard. The audio will naturally drop off as you reach this distance.

```lua
Config.GateIncrement = 0.004
Config.PedGateIncrement = 0.50
Config.SoundRadius = 20.0
Config.MaxVolume = 1.0
```

You can load any changes made to this config file by saving it, then typing in the console 'restart LGMods\_Sinner\_UK' (without the apostrophes).

### Retexturing&#x20;

This product has been made in a way to separate all of the branding and related textures into three texture dictionaries (YTD files). This allows you to retexture the station to your own requirements quickly and efficiently. Our product has been made this way to allow customising the station to be extremely straightforward.

Below are the YTD files that hold the textures you can replace;

<table><thead><tr><th width="298">Filename</th><th>Description</th></tr></thead><tbody><tr><td>lgmods_sinnertextures.ytd</td><td>This is the YTD where you will find all custom signage, props and objects and is fully customisable</td></tr><tr><td>lgmods_sinner_wallphotos.ytd</td><td>This is the YTD where you will find some art that has been placed on the walls upstairs in the police station</td></tr><tr><td>hei_heist_dlc_police_txd.ytd</td><td>This is the default GTA YTD from the Police Station, we utilise some of the original building components so there are a couple of noticeboards and posters within here that are editable</td></tr><tr><td>hei_heist_dlc_police_txd+hi.ytd</td><td>This is a +hi YTD very similar to the above one, it has some of the same textures within it that you also need to replace to ensure they stream correct.</td></tr></tbody></table>

***

## Retexture Installation

{% hint style="info" %}
This section is only relevant if you have purchased, or have been provided alternative texture files for UK Sinner Street. If you only have UK Sinner Street then you do not need to do anything with these instructions.

These instructions assume you have UK Sinner Street installed, having followed the [above instructions](/mlo-interiors/sinner-street#installation). If not, complete this stage first.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation and your 'LGMods\_Sinner\_UK' folder.
2. Within the 'LGMods\_Sinner\_UK' folder, open the folder called 'stream'
3. Place the files you have been provided within this folder. When prompted if you wish to overwrite existing files, select 'Yes'.
4. Restart your FiveM server

{% hint style="info" %}
When connecting to your server after installation and visiting the location of this modification, please be aware that FiveM will need to download the changed files. Due to caching this may not happen instantly and therefore some textures may still be the previous textures. Please be patient while these load.
{% endhint %}

Verification: This is LGMods’ official documentation site. This notice confirms that DMCA takedown requests are being filed by Lewie Gee, owner of LGMods.


# UK Police Station (Sandy Shores)

### Product Information

Purchase → [Tebex Store - UK Police Station (Sandy Shores)](https://store.lgmods.co.uk/package/6893697)

Sandy Shores PD is a complete exterior and interior overhaul / rebuild of the original Sandy Shores Sheriff's Station & Sandy Shores Medical Centre  on Alhambra Drive in the GTA V game world.

It includes many additional rooms such as: - Custody Desk & Charge Room - Holding Cells - Cell Block - Briefing rooms, interview rooms, evidence storage, lockers, and much more

It also features fully functioning front and side gates  that can be opened via commands, a gate code, or whitelisted jobs.

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

### Contents

| File / Folder    | Information                                                                          | Required to be configured?   |
| ---------------- | ------------------------------------------------------------------------------------ | ---------------------------- |
| `[client]`       | Folder containing encrypted scripts for multiple functions within the police station | No – Do not edit             |
| `[html]`         | Folder containing files for the panel UI, audio, etc.                                | No – Do not edit             |
| `[stream]`       | Folder containing the models and textures used to replace original content           | Optional – see Configuration |
| `.fxap`          | FiveM file required for the modification to load                                     | No – Do not edit             |
| `config.lua`     | Configuration for the modification (gate behaviour, whitelisting, etc.)              | Optional – see Configuration |
| `fxmanifest.lua` | FiveM config file to determine what files need to be loaded/streamed                 | No – Do not edit             |
| `server.lua`     | Encrypted script that links various elements of the addon                            | No – Do not edit             |

{% hint style="danger" %}
Unless specifically mentioned, do not edit the files unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.
{% endhint %}

### Installation

{% hint style="info" %}
**ℹ️ Note**\
These instructions assume you have a working FiveM server that you can already connect to.\
For help setting up a FiveM server, see: [FiveM Server Setup Guide](https://docs.fivem.net/docs/server-manual/setting-up-a-server/)
{% endhint %}

1. Locate the `resources` folder in your FiveM server installation (same directory as `server.cfg`).
2. Download the product from your [FiveM Keymaster](https://portal.cfx.re/assets) if you haven't already.
3. Extract the ZIP archive contents into the `resources` folder.
4. You should now have a folder named `LGMods_Sandy_UK` containing the files listed above.

{% hint style="info" %}
**ℹ️ Important**\
If you see an extra nested folder inside `LGMods_Sandy_UK`, move all contents up one level so the listed files/folders are directly inside `LGMods_Sandy_UK`. Otherwise the resource won't load properly.
{% endhint %}

5. Open your `server.cfg` file and add the following line below your other `ensure` lines:

```lua
ensure LGMods_Sandy_UK
```

Example:

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap

ensure LGMods_Sandy_UK
```

6. **Restart** your server. (MLO resources like this usually don't load correctly with the `start` command on a running server — a full restart is required.)

{% hint style="info" %}
**ℹ️ Streaming Note**\
When players first approach the location, FiveM streams the assets to their client. Depending on internet speed, some parts may take a few moments to fully appear. Be patient during initial load.
{% endhint %}

### Configuration

All editable settings are in **`config.lua`**. **Do not** edit any other files.

#### ESX / QBCore Whitelisting Settings

The framework and allowed jobs for gate access are configured here. Change `Config.Framework` to match your server (only if the framework is installed).

```lua
Config = {}
Config.Framework = "standalone"

Config.AllowedJobs = {
    "police",
    "sheriff",
    "ambulance"
}
```

{% hint style="warning" %}
ESX and QBCore are third party resources and are not included with this LGMods product, and we are unable to assist with their setup.

Only enable these options **if you have the framework installed**. Doing so without the framework being installed correctly is likely to cause errors with this script. Otherwise pick standalone.

Be careful to ensure each entry within the jobs array has apostrophes around the job role and a comma is placed after them, with exception to the last entry.
{% endhint %}

#### Front Gate / Side Gate Settings

```lua
Config.ShowPrompt = true

Config.Commands = {
    OpenGate = "opengate",
    ResetAlarm = "resetalarm"
}

Config.GateCode = {
    Required = true,
    Code = "1234"
}
```

* Set `Required = false` to disable the code and rely only on job whitelisting.
* `Code` must be exactly **4 numerical digits**.

#### Gate Behaviour

```lua
Config.Gate = { -- Main gate
    ActivationDistance = 2.0,
    TimeOpen = 10000,     -- in milliseconds
    SwingSpeed = 0.2
}

Config.SideGate = { -- Side gate
    TimeOpen = 10000,
    SwingSpeed = 0.2
}
```

Defaults are balanced — change only if needed.

#### Sound Configuration

```lua
Config.Sounds = {
    Volume = 0.5,
    Radius = 50.0
}
```

#### Targeting Configuration (optional)

```lua
Config.Targetting = {
    Enabled = false,
    TargetSystem = "ox_target"   -- "qb-target" or "ox_target"
}
```

If `Enabled = true`, interaction uses your targeting system instead of the E key prompt.

***

After editing `config.lua`, save it and reload the resource in console:

```
restart LGMods_Sandy_UK
```

{% hint style="danger" %}

## Common Issues

**Mirror Park Studios – Canonbury Estate**

There are known conflicts with the Canonbury Estate.\
Follow the steps below to resolve these issues:

#### Steps to Fix

1. **Access the Files**\
   Find the required files in the LG Mods Discord:\
   [LG Mods Discord Link](https://discord.com/channels/1116306722982740090/1166645294109294663/1386684471104897086)
2. **Download Files**\
   Download the **two files** linked in the message pinned/posted at the link above.
3. **Replace Files in the Canonbury Folder**
   * Place the downloaded files into:\
     `mps_estates/stream/canonbury/default/ymap`
   * Then **delete** the file `lr_cs4_roads.ymap` from the same folder.
4. **Download Additional File**\
   Download this extra fix file:\
   [Additional Fix File](https://discord.com/channels/1116306722982740090/1166645294109294663/1386692273105797251)
5. **Add to the OCLL Folder**\
   Place the downloaded file into:\
   `mps_estates/stream/canonbury/default/occl`

After completing these steps, the Canonbury Estate conflicts should be resolved.
{% endhint %}

Enjoy your brand new UK-themed Sandy Shores Police Station!


# UK Traffic Base

## Product Information

Purchase - [Tebex Store - UK Traffic Base (Sustancia Road) ](https://store.lgmods.co.uk/package/5967223)

The UK Traffic Base based on the original NOOSE Base location off Sustancia Road offers an exterior and interior overhaul of the location, with various interior rooms added you would expect to see in a UK themed traffic base. The exterior has an overhauled entrance as well as a number of features including marked parking bays, EV chargers, storage room and refueling bays.

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

## Contents

<table data-full-width="false"><thead><tr><th width="226">File/[Folder]</th><th width="289">Information</th><th>Required to be configured?</th><th data-hidden></th></tr></thead><tbody><tr><td>[stream]</td><td>Folder containing the model and textures used to replace the original content</td><td>Optional - see <a href="#configuration">configuration</a></td><td></td></tr><tr><td>.fxap</td><td>A FiveM file required to be included within the resource folder for the modification to load</td><td>No - Do not edit</td><td></td></tr><tr><td>fxmanifest.lua</td><td>FiveM config file to determine what files need to be loaded/streamed. Do not edit</td><td>No - Do not edit</td><td></td></tr></tbody></table>

{% hint style="danger" %}
Unless specifically mentioned, do not edit the files unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.
{% endhint %}

## Installation

{% hint style="info" %}
These instructions assume you have a working FiveM server that you can already connect to without issue. Please see [here](https://docs.fivem.net/docs/server-manual/setting-up-a-server/) for more information on setting up a FiveM server.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation. It should be in the same location as your server.cfg.&#x20;
2. Download the LG Mods product from your [FiveM Keymaster](https://keymaster.fivem.net/), if you haven't already.
3. Extract the files from the ZIP archive you downloaded into the 'Resources' folder.
4. The folder inside the 'Resources' folder should be 'LGMods\_UK\_TrafficBase' and within it you see the files listed above.&#x20;

{% hint style="info" %}
If you find another folder inside the LGMods\_UK\_TrafficBase folder, then you need to make sure the contents are moved so that the files above are within the first directory you open from the resources folder, otherwise the addon will not load
{% endhint %}

5. Open your server.cfg and find where you see a number of lines that start with the word 'ensure'.  The default resources are usually included and appear like below.&#x20;

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
```

6. Below these lines is where you will add this resource with the following line

```
ensure LGMods_UK_TrafficBase
```

7. Restart your server. Some resources can be loaded while the server is running using the start command, however MLO's usually don't work using this method as such you will need to restart your server for this product.

{% hint style="info" %}
All players that join must 'stream' the asset to their computer for the first time they connect to the server and go near to where the product is located. FiveM and GTA then cache what is downloaded. Depending on the server and clients internet connection, it may take a short while for the assets to stream and therefore parts of the product may not load as quick as others. Please be patient while this loads.&#x20;
{% endhint %}

## Configuration

There are no configuration options for this product as it contains no additional scripts.

### Retexturing&#x20;

This product has been made in a way to separate all of the branding and related textures into three texture dictionaries (YTD files). This allows you to retexture the station to your own requirements quickly and efficiently. Our product has been made this way to allow customising the station to be extremely straightforward.

Below is the single YTD file that hold the textures you can replace;

| Filename                | Description                                                     |
| ----------------------- | --------------------------------------------------------------- |
| lgmods\_trafficbase.ytd | All customisable textures for the traffic base are in this file |

***

## Retexture Installation

{% hint style="info" %}
This section is only relevant if you have purchased, or have been provided alternative texture files for UK Traffic Base. If you only have UK Traffic Base then you do not need to do anything with these instructions.

These instructions assume you have UK Traffic Base installed, having followed the[ above instructions](#installation). If not, complete this stage first.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation and your 'LGMods\_UK\_TrafficBase' folder.
2. Within the 'LGMods\_UK\_TrafficBase' folder, open the folder called 'stream'
3. Place the files you have been provided within this folder. When prompted if you wish to overwrite existing files, select 'Yes'.
4. Restart your FiveM server

{% hint style="info" %}
When connecting to your server after installation and visiting the location of this modification, please be aware that FiveM will need to download the changed files. Due to caching this may not happen instantly and therefore some textures may still be the previous textures. Please be patient while these load.
{% endhint %}


# UK JRU Base

## Product Information

[Purchase - Tebex Store - Joint Response Unit Base (Tangerine Street)](https://store.lgmods.co.uk/package/6191579)

The police and ambulance Joint Response Unit is an exterior and interior overhaul to the Taxi building on Tangerine Street, within the GTA5 game world. It includes a number of rooms which includes computers with incoming/outgoing calls on a screen, a vehicle garage with parking spaces and equipment, command offices and others. This also includes functioning secure front gate and pedestrian gates which can be opened by interacting with a keypad.&#x20;

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

## Contents

<table data-full-width="false"><thead><tr><th width="226">File/[Folder]</th><th width="289">Information</th><th>Required to be configured?</th><th data-hidden></th></tr></thead><tbody><tr><td>[client]</td><td>Folder containing encrypted scripts for multiple functions within the police station</td><td>No - Do not edit</td><td></td></tr><tr><td>[html]</td><td>Folder containing files for the panel UI, audio etc.</td><td>No - Do not edit</td><td></td></tr><tr><td>[stream]</td><td>Folder containing the model and textures used to replace the original content</td><td>Optional - see <a href="#configuration">configuration</a></td><td></td></tr><tr><td>.fxap</td><td>A FiveM file required to be included within the resource folder for the modification to load</td><td>No - Do not edit</td><td></td></tr><tr><td>config.lua</td><td>Configuration for the modification. You can modify the way the gate works including any whitelisting for who can open the gate.  Read the comments to see what can or cannot be edited</td><td>Optional - see <a href="#configuration">configuration</a></td><td></td></tr><tr><td>doortuning.ymt</td><td>Files to manage the gates. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>fxmanifest.lua</td><td>FiveM config file to determine what files need to be loaded/streamed. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>gta5.meta</td><td>File required to manage how certain parts of the addon works. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>interiorproxies.meta</td><td>File required to manage how certain parts of the addon works. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>server.lua</td><td>Encrypted script that has functions that link in with other elements of the addon</td><td>No - Do not edit</td><td></td></tr></tbody></table>

{% hint style="danger" %}
Unless specifically mentioned, do not edit the files unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.
{% endhint %}

## Installation

{% hint style="info" %}
These instructions assume you have a working FiveM server that you can already connect to without issue. Please see [here](https://docs.fivem.net/docs/server-manual/setting-up-a-server/) for more information on setting up a FiveM server.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation. It should be in the same location as your server.cfg.&#x20;
2. Download the LG Mods product from your [FiveM Keymaster](https://keymaster.fivem.net/), if you haven't already.
3. Extract the files from the ZIP archive you downloaded into the 'Resources' folder.
4. The folder inside the 'Resources' folder should be 'LGMods\_TangerineStreet\_JRU' and within it you see the files listed above.&#x20;

{% hint style="info" %}
If you find another folder inside the LGMods\_TangerineStreet\_JRU folder, then you need to make sure the contents are moved so that the files above are within the first directory you open from the resources folder, otherwise the addon will not load
{% endhint %}

5. Open your server.cfg and find where you see a number of lines that start with the word 'ensure'.  The default resources are usually included and appear like below.&#x20;

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
```

6. Below these lines is where you will add this resource with the following line

```
ensure LGMods_TangerineStreet_JRU
```

7. Restart your server. Some resources can be loaded while the server is running using the start command, however MLO's usually don't work using this method as such you will need to restart your server for this product.

{% hint style="info" %}
All players that join must 'stream' the asset to their computer for the first time they connect to the server and go near to where the product is located. FiveM and GTA then cache what is downloaded. Depending on the server and clients internet connection, it may take a short while for the assets to stream and therefore parts of the product may not load as quick as others. Please be patient while this loads.&#x20;
{% endhint %}

## Features

The gates at the Tangerine Street JRU base are able to be locked to a framework job and/or a keypad. That is, you can use either or both to secure the gates around this base. To do this, some configuration is required.

## Configuration

Configuration of this product can be done within the file 'config.lua'. No other files should be edited.

### ESX/QBCore Whitelisting Settings

The next and final part that can be configured is the ESX/ ESX-Legacy / QBCore job whitelisting settings, found further down 'config.lua'.

If you are using ESX, ESX-Legacy or QBCore and have whitelisted roles which you want to be able to open the gate then include them here. 'police' and 'ems' have already been placed as an example, but change these to match your ESX/ESX-Legacy/QBCore configuration.&#x20;

Change value from false to true after enabled if you are wishing to use that frameworks whitelisting. If both are left false then anyone can run the command to open the gates.

{% hint style="warning" %}
ESX and QBCore are third party resources and are not included with this LGMods product, and we are unable to assist with their setup.

Only enable these options **if you have the framework installed**. Doing so without the framework being installed correctly is likely to cause errors with this script. Otherwise pick standalone.

Be careful to ensure each entry within the jobs array has apostrophes around the job role and a comma is placed after them, with exception to the last entry.
{% endhint %}

```lua
Config = {}

Config.Framework = 'standalone' -- Accepted values are standalone, oEssentials, PoliceEssentials, QBCore, ESX, ESX-Legacy. If you are using ESX please remove "--" from the start of Line 18 in fxmanifest.

Config.AllowedJobs = { -- This is only checked when Framework is set to QBCore or ESX.
    "Job1",
    "Job2"
}
```

### Front Gate Settings

Additional to the whitelisting (if you chose to use it) you can also set a pin for opening the gates. Users can go up to a keypad and press `E` to open the 4 digit pinpad. They will need to enter the code below. This pin is the same for all pin pads. If you prefer to use whitelisting only and remove the keypad prompt all toghether, change CodeRequired to **false**.

GateCode is the code you can change - noting it must only be 4 numerical digits.

The two commands below these options are not required to be used and should not be changed.

```lua
Config.CodeRequired = true -- If set to true, despite the user being authorised above they will need a code.
Config.GateCode = 1234 -- MAXIMUM OF 4 CHARACTERS

Config.GateCommand = "tangerinegate"
```

The GateIncrement and PedGateIncrement are two variables that set the animation of the front and pedestrian gates. You should not need to edit these. However, if you do, be mindful this is the amount the gate moves 'per tick'. A tick occurs more often if your FPS (frame rate) is higher, so those with a higher FPS will see the gate move faster and if the FPS is lower, the gate will move slower. This is a limitation to smoothly moving this gate.

SoundRadius is how far the audio can be heard. The audio will naturally drop off as you reach this distance.

```lua
Config.GateIncrement = 0.004
Config.PedGateIncrement = 0.50
Config.SoundRadius = 20.0
Config.MaxVolume = 1.0
```

You can load any changes made to this config file by saving it, then typing in the console 'restart LGMods\_TangerineStreet\_JRU' (without the apostrophes).

### Retexturing&#x20;

This product has been made in a way to separate all of the branding and related textures into three texture dictionaries (YTD files). This allows you to retexture the station to your own requirements quickly and efficiently. Our product has been made this way to allow customising the station to be extremely straightforward.

Below are the YTD files that hold the textures you can replace;

<table><thead><tr><th width="298">Filename</th><th>Description</th></tr></thead><tbody><tr><td>lgmods_tangtextures.ytd</td><td>This is the YTD where you will find all custom signage, props and objects and is fully customisable</td></tr></tbody></table>

***

## Retexture Installation

{% hint style="info" %}
This section is only relevant if you have purchased, or have been provided alternative texture files for the Tangerine JRU Base. If you only have UK JRU Base then you do not need to do anything with these instructions.

These instructions assume you have UK JRU Base installed, having followed the [above instructions](/mlo-interiors/sinner-street#installation). If not, complete this stage first.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation and your 'LGMods\_TangerineStreet\_JRU' folder.
2. Within the 'LGMods\_TangerineStreet\_JRU' folder, open the folder called 'stream'
3. Place the files you have been provided within this folder. When prompted if you wish to overwrite existing files, select 'Yes'.
4. Restart your FiveM server

{% hint style="info" %}
When connecting to your server after installation and visiting the location of this modification, please be aware that FiveM will need to download the changed files. Due to caching this may not happen instantly and therefore some textures may still be the previous textures. Please be patient while these load.
{% endhint %}


# UK A\&E (Crusade Avenue)

### Product Information

Purchase - Tebex Store - [LGMods | UK A\&E (Crusade Avenue)](https://store.lgmods.co.uk/package/6494794)<br>

UK A\&E (Crusade Avenue) is an exterior and interior overhaul to the original Central Los Santos Medical Center on Crusade Avenue, within the GTA5 game world. It includes a number of additional rooms such as: triage bays & resus room and many more.&#x20;

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

### Contents

| File / Folder    | Information                                                                | Required to be configured?   |
| ---------------- | -------------------------------------------------------------------------- | ---------------------------- |
| `[stream]`       | Folder containing the models and textures used to replace original content | Optional – see Configuration |
| `.fxap`          | FiveM file required for the modification to load                           | No – Do not edit             |
| `fxmanifest.lua` | FiveM config file to determine what files need to be loaded/streamed       | No – Do not edit             |

{% hint style="danger" %}
Unless specifically mentioned, do not edit the files unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.
{% endhint %}

### Installation

{% hint style="info" %}
**ℹ️ Note**\
These instructions assume you have a working FiveM server that you can already connect to.\
For help setting up a FiveM server, see: [FiveM Server Setup Guide](https://docs.fivem.net/docs/server-manual/setting-up-a-server/)
{% endhint %}

1. Locate the `resources` folder in your FiveM server installation (same directory as `server.cfg`).
2. Download the product from your [FiveM Keymaster](https://portal.cfx.re/assets) if you haven't already.
3. Extract the ZIP archive contents into the `resources` folder.
4. You should now have a folder named `LGMods_A&E`  containing the files listed above.

{% hint style="info" %}
**ℹ️ Important**\
If you see an extra nested folder inside , move all contents up one level so the listed files/folders are directly inside . Otherwise the resource won't load properly.
{% endhint %}

5. Open your `server.cfg` file and add the following line below your other `ensure` lines:

```lua
ensure LGMods_A&E
```

Example:

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap

ensure LGMods_A&E
```

6. **Restart** your server. (MLO resources like this usually don't load correctly with the `start` command on a running server — a full restart is required.)

{% hint style="info" %}
**ℹ️ Streaming Note**\
When players first approach the location, FiveM streams the assets to their client. Depending on internet speed, some parts may take a few moments to fully appear. Be patient during initial load.
{% endhint %}

Enjoy your brand new UK A\&E


# LGMods British Banks

### <sup>Product Information</sup>

Purchase - Tebex Store - [LGMods | LGMods British Banks MLO's](https://store.lgmods.co.uk/package/6673380)

**British Banks LG Bank (Map Wide MLO)** Elevate your FiveM server's financial world with this complete map wide overhaul that replaces every Fleeca bank with authentic British style exteriors and high quality interiors.

It transforms the vanilla banks into realistic UK banking environments, featuring:

* Classic British bank counters, teller areas, and back offices
* Secure vaults and private consultation rooms
* Waiting areas, ATMs, and branded signage inspired by real UK high-street banks
* And additional immersive details for deeper roleplay

This MLO also includes custom UK style ATMs and authentic branding throughout, perfect for heists, banking jobs, financial crime RP, or everyday civilian life in a British-themed Los Santos.

### Locations

* Great Ocean Highway, Banham Canyon
* Route 68, Harmony
* Hawick Avenue & Meteor Street, Alta
* Hawick Avenue, Burton
* Boulevard Del Perro, Morningwood
* Vespucci Boulevard, Legion Square

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

### Contents

| File / Folder    | Information                                                                | Required to be configured?   |
| ---------------- | -------------------------------------------------------------------------- | ---------------------------- |
| `[stream]`       | Folder containing the models and textures used to replace original content | Optional – see Configuration |
| `.fxap`          | FiveM file required for the modification to load                           | No – Do not edit             |
| `fxmanifest.lua` | FiveM config file to determine what files need to be loaded/streamed       | No – Do not edit             |

{% hint style="danger" %}
Unless specifically mentioned, do not edit the files unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.
{% endhint %}

### Installation

{% hint style="info" %}
**ℹ️ Note**\
These instructions assume you have a working FiveM server that you can already connect to.\
For help setting up a FiveM server, see: [FiveM Server Setup Guide](https://docs.fivem.net/docs/server-manual/setting-up-a-server/)
{% endhint %}

1. Locate the `resources` folder in your FiveM server installation (same directory as `server.cfg`).
2. Download the product from your [FiveM Keymaster](https://portal.cfx.re/assets) if you haven't already.
3. Extract the ZIP archive contents into the `resources` folder.
4. You should now have a folder named  `LGMods_Banks` containing the files listed above.

{% hint style="info" %}
**ℹ️ Important**\
If you see an extra nested folder inside , move all contents up one level so the listed files/folders are directly inside . Otherwise the resource won't load properly.
{% endhint %}

5. Open your `server.cfg` file and add the following line below your other `ensure` lines:

```lua
ensure LGMods_Banks
```

Example:

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap

ensure LGMods_Banks
```

6. **Restart** your server. (MLO resources like this usually don't load correctly with the `start` command on a running server — a full restart is required.)

{% hint style="info" %}
**ℹ️ Streaming Note**\
When players first approach the location, FiveM streams the assets to their client. Depending on internet speed, some parts may take a few moments to fully appear. Be patient during initial load.
{% endhint %}

Enjoy your brand new UK Banks


# UK Estate Agents - Elm & Oak Estates

### <sup>Product Information</sup>

Purchase - Tebex Store - [LGMods | UK Estate Agents - Elm & Oak Estates](https://store.lgmods.co.uk/package/6673380)

Bring authentic British real estate charm to your FiveM server with this fully custom MLO that recreates a professional UK-style estate agency.

It introduces a detailed, modern office environment modeled after real British high-street estate agents, featuring:

* Spacious reception and client consultation areas
* Private offices and meeting rooms
* Modern display walls for property listings and photos
* Branded Elm & Oak signage, desks, computers, filing cabinets, and exclusive custom props
* Waiting area, kitchenette, and storage space for added immersion

Perfect for real estate roleplay, property sales, client meetings, paperwork signings, viewings coordination, or everyday civilian life in a British themed Los Santos.

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

### Contents

| File / Folder    | Information                                                                | Required to be configured?   |
| ---------------- | -------------------------------------------------------------------------- | ---------------------------- |
| `[stream]`       | Folder containing the models and textures used to replace original content | Optional – see Configuration |
| `.fxap`          | FiveM file required for the modification to load                           | No – Do not edit             |
| `fxmanifest.lua` | FiveM config file to determine what files need to be loaded/streamed       | No – Do not edit             |

{% hint style="danger" %}
Unless specifically mentioned, do not edit the files unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.
{% endhint %}

### Installation

{% hint style="info" %}
**ℹ️ Note**\
These instructions assume you have a working FiveM server that you can already connect to.\
For help setting up a FiveM server, see: [FiveM Server Setup Guide](https://docs.fivem.net/docs/server-manual/setting-up-a-server/)
{% endhint %}

1. Locate the `resources` folder in your FiveM server installation (same directory as `server.cfg`).
2. Download the product from your [FiveM Keymaster](https://portal.cfx.re/assets) if you haven't already.
3. Extract the ZIP archive contents into the `resources` folder.
4. You should now have a folder named `LGMods_EstateAgents` containing the files listed above.

{% hint style="info" %}
**ℹ️ Important**\
If you see an extra nested folder inside , move all contents up one level so the listed files/folders are directly inside . Otherwise the resource won't load properly.
{% endhint %}

5. Open your `server.cfg` file and add the following line below your other `ensure` lines:

```lua
ensure LGMods_EstateAgents
```

Example:

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap

ensure LGMods_EstateAgents
```

6. **Restart** your server. (MLO resources like this usually don't load correctly with the `start` command on a running server — a full restart is required.)

{% hint style="info" %}
**ℹ️ Streaming Note**\
When players first approach the location, FiveM streams the assets to their client. Depending on internet speed, some parts may take a few moments to fully appear. Be patient during initial load.
{% endhint %}

Enjoy your brand new UK Estate Agents


# UK Post Office

### <sup>Product Information</sup>

Purchase - Tebex Store - [LGMods | UK Post Office](https://store.lgmods.co.uk/package/6415138)<br>

Bring authentic British vibes to your UK themed FiveM server with this detailed UK Post Office MLO

### Location&#x20;

<figure><img src="https://4001005675-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSJErWBfgQSVIbNNy8O52%2Fuploads%2F8es76f8olBSAZqCQt94L%2Fgfdggfdgfdfg.png?alt=media&amp;token=16495d63-aa33-4f47-a8fc-fdb0027a0e5b" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

### Contents

| File / Folder    | Information                                                                | Required to be configured?   |
| ---------------- | -------------------------------------------------------------------------- | ---------------------------- |
| `[stream]`       | Folder containing the models and textures used to replace original content | Optional – see Configuration |
| `.fxap`          | FiveM file required for the modification to load                           | No – Do not edit             |
| `fxmanifest.lua` | FiveM config file to determine what files need to be loaded/streamed       | No – Do not edit             |

{% hint style="danger" %}
Unless specifically mentioned, do not edit the files unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.
{% endhint %}

### Installation

{% hint style="info" %}
**ℹ️ Note**\
These instructions assume you have a working FiveM server that you can already connect to.\
For help setting up a FiveM server, see: [FiveM Server Setup Guide](https://docs.fivem.net/docs/server-manual/setting-up-a-server/)
{% endhint %}

1. Locate the `resources` folder in your FiveM server installation (same directory as `server.cfg`).
2. Download the product from your [FiveM Keymaster](https://portal.cfx.re/assets) if you haven't already.
3. Extract the ZIP archive contents into the `resources` folder.
4. You should now have a folder named  `LGMods_PostalOffice`  containing the files listed above.

{% hint style="info" %}
**ℹ️ Important**\
If you see an extra nested folder inside , move all contents up one level so the listed files/folders are directly inside . Otherwise the resource won't load properly.
{% endhint %}

5. Open your `server.cfg` file and add the following line below your other `ensure` lines:

```lua
ensure LGMods_PostalOffice
```

Example:

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap

ensure LGMods_PostalOffice
```

6. **Restart** your server. (MLO resources like this usually don't load correctly with the `start` command on a running server — a full restart is required.)

{% hint style="info" %}
**ℹ️ Streaming Note**\
When players first approach the location, FiveM streams the assets to their client. Depending on internet speed, some parts may take a few moments to fully appear. Be patient during initial load.
{% endhint %}

Enjoy your brand new UK Postal Office&#x20;


# LG Helicam

This guide explains how to configure LiveKit and set up the required browser shortcut for the NPAS live sharing system.

## Step 1 - Create and Configure Your LiveKit Account

1. Go to [**https://livekit.com**](https://livekit.com) and create a free account.
2. Once your account has been created, navigate to:\
   [**https://cloud.livekit.io/**](https://cloud.livekit.io/)
3. In the dashboard, open the **Settings** menu.
4. Select **API Keys**.
5. Choose the **first API key** listed.

You will then be able to view the following information:

* **WebSocket URL**
* **API Key**
* **API Secret**

These values will be required for configuring the script.

***

## Step 2 - Configure Your `server.cfg`

Open your **server.cfg** file.

Locate the section where your server tags are defined (the line beginning with `sets tags`).

Directly underneath this line, add the following configuration:

```
set lg_helicam_lk_key    "YOUR_LIVEKIT_API_KEY"
set lg_helicam_lk_secret "YOUR_LIVEKIT_API_SECRET"
```

Replace the placeholders with the **API Key** and **API Secret** obtained from your LiveKit dashboard.

***

## Step 3 - Create the NPAS Live Share Browser Shortcut

For best compatibility we recommend using **Google Chrome**.

1. Create a **new desktop shortcut** for your browser.
2. Rename the shortcut to something easily recognisable, such as **NPAS Helicam**.
3. Right-click the shortcut and select **Properties**.
4. In the properties window, open the **Shortcut** tab.
5. Locate the field labelled **Target:**.

You will need to replace the contents of the **Target:** field with the appropriate command for your browser.

<figure><img src="https://4001005675-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSJErWBfgQSVIbNNy8O52%2Fuploads%2FHPzm66aDxaJMUjEy7VM8%2FScreenshot%202026-03-13%20185104.png?alt=media&amp;token=c57091d6-cc21-48a1-8c71-e442e7942e88" alt="" width="439"><figcaption></figcaption></figure>

***

### Google Chrome

```
"C:\Program Files\Google\Chrome\Application\chrome.exe" --unsafely-treat-insecure-origin-as-secure="http://YOUR_IP:YOUR_PORT/" --user-data-dir="C:\chrome-helicam"
```

***

### Microsoft Edge

```
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --unsafely-treat-insecure-origin-as-secure="http://YOUR_IP:YOUR_PORT/" --user-data-dir="C:\edge-helicam"
```

***

### Brave

```
"C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe" --unsafely-treat-insecure-origin-as-secure="http://YOUR_IP:YOUR_PORT/" --user-data-dir="C:\brave-helicam"
```

***

### Opera

```
"C:\Users\%USERNAME%\AppData\Local\Programs\Opera\opera.exe" --unsafely-treat-insecure-origin-as-secure="http://YOUR_IP:YOUR_PORT/" --user-data-dir="C:\opera-helicam"
```

***

### Opera GX

```
"C:\Users\%USERNAME%\AppData\Local\Programs\Opera GX\opera.exe" --unsafely-treat-insecure-origin-as-secure="http://YOUR_IP:YOUR_PORT/" --user-data-dir="C:\operagx-helicam"
```

***

## Important

Replace **`YOUR_IP`** and **`YOUR_PORT`** with the **same server IP address and port configured in the script’s `config.lua`.**

Example:

```
http://123.45.67.89:30120/
```

After entering the command into the **Target:** field, press **Apply**, then **OK**.

***

## Note

Browser installation paths may vary depending on your system and how the browser was installed. If the shortcut does not work, ensure the **browser executable path matches your installation location**.

If you require assistance with the setup, please **open a support ticket in our Discord server**.

**Discord:**\
<https://discord.gg/lgmods>


# LG Dispatch

## Exports & Integration

LG Dispatch exposes a small set of exports so other resources can talk to the dispatch system.

You can use these to:

* Create dispatch calls from robbery, alarm, or shooting scripts
* Trigger officer panic alerts
* Read active calls from another resource

{% hint style="danger" %}
**Resource folder name matters**

The resource folder **must** be named exactly `LG_Dispatch`.

If you rename it (e.g. `lg-dispatch` or `lg_dispatch`), every example on this page will fail unless you also change the export name to match your folder.
{% endhint %}

{% hint style="warning" %}
**Server vs client**

Calling a server export from a client script will not work.
{% endhint %}

| Export               | Side            |
| -------------------- | --------------- |
| `CreateDispatchCall` | **Server only** |
| `GetActiveCalls`     | **Server only** |
| `TriggerPanic`       | **Client only** |

***

### CreateDispatchCall

**Side:** Server only

Creates a new call and broadcasts it to all on-duty emergency units.

```lua
exports['LG_Dispatch']:CreateDispatchCall(callData)
```

#### Example

```lua
-- server.lua (YOUR resource)
local callId = exports['LG_Dispatch']:CreateDispatchCall({
    type        = 'robbery',
    priority    = 1,
    coords      = { x = 215.3, y = -810.5, z = 30.7 },
    street      = 'Strawberry Ave',
    description = 'Armed robbery at Fleeca Bank',
    suspectInfo = 'IC1 male wearing black hoodie',
    vehicleInfo = 'Red Dominator, plate ABC123',
    createdBy   = 'Store Alarm',
})

if callId then
    print('Dispatch call created: #' .. callId)
else
    print('Call was not created (likely deduplicated)')
end
```

#### Returns

| Value    | Meaning                                                                    |
| -------- | -------------------------------------------------------------------------- |
| `number` | The new call ID                                                            |
| `nil`    | Call was blocked by deduplication (same type, within radius + time window) |

#### Fields

**`type` (string, optional)**

Call type key from `Config.CallTypes`.

Defaults to `'general'` if missing or unknown.

```lua
type = 'robbery'
```

Built-in types: `999`, `panic`, `robbery`, `shooting`, `traffic`, `medical`, `fire_call`, `general`

**`priority` (number, optional)**

Grade / priority level (`1`–`4`).

If omitted, uses the call type’s `defaultPriority`.

```lua
priority = 1
```

**`coords` (table, optional)**

Incident world coordinates.

**Must use named keys** `x`, `y`, `z`:

```lua
coords = { x = 215.3, y = -810.5, z = 30.7 }
```

`vector3` also works:

```lua
coords = vector3(215.3, -810.5, 30.7)
```

{% hint style="info" %}
Do **not** pass array-style coords like `{ 215.3, -810.5, 30.7 }` — map markers and dedupe will break.
{% endhint %}

**`street` (string, optional)**

Location / street name.

Defaults to `'Unknown Location'`.

```lua
street = 'Strawberry Ave'
```

**`description` (string, optional)**

Main incident description.

Defaults to the call type label.

```lua
description = 'Armed robbery at Fleeca Bank'
```

**`callerNotes` (string, optional)**

Extra notes from the caller / system.

```lua
callerNotes = 'Caller reports suspect still inside'
```

**`suspectInfo` (string, optional)**

Suspect description.

```lua
suspectInfo = 'IC1 male wearing black hoodie'
```

**`vehicleInfo` (string, optional)**

Vehicle / plate info.

```lua
vehicleInfo = 'Red Dominator, plate ABC123'
```

**`postal` (string, optional)**

Postal code (if your server uses postals).

```lua
postal = '123'
```

**`createdBy` (string, optional)**

Who/what created the call.

Defaults to `'System'`.

```lua
createdBy = 'Store Alarm'
```

***

### Creating a call from a client script

Most robbery / alarm scripts run logic on the **client**.\
`CreateDispatchCall` is **server-only**, so bridge it through your own server event.

#### Client

```lua
-- client.lua (YOUR resource)
RegisterNetEvent('my-robbery:client:alertPolice', function()
    local ped = PlayerPedId()
    local coords = GetEntityCoords(ped)
    local streetHash = GetStreetNameAtCoord(coords.x, coords.y, coords.z)
    local street = GetStreetNameFromHashKey(streetHash)

    TriggerServerEvent('my-robbery:server:createDispatch', {
        type        = 'robbery',
        priority    = 1,
        coords      = { x = coords.x, y = coords.y, z = coords.z },
        street      = street,
        description = 'Armed robbery in progress',
        createdBy   = 'Robbery Script',
    })
end)
```

#### Server

```lua
-- server.lua (YOUR resource)
RegisterNetEvent('my-robbery:server:createDispatch', function(data)
    if GetResourceState('LG_Dispatch') ~= 'started' then return end

    local callId = exports['LG_Dispatch']:CreateDispatchCall(data)
    if not callId then
        print('[my-robbery] Dispatch call skipped (duplicate or failed)')
    end
end)
```

{% hint style="success" %}
Make sure `LG_Dispatch` is started **before** your integrating resource in `server.cfg`.
{% endhint %}

***

### GetActiveCalls

**Side:** Server only

Returns all currently active (non-closed) dispatch calls.

```lua
exports['LG_Dispatch']:GetActiveCalls()
```

#### Example

```lua
-- server.lua
local calls = exports['LG_Dispatch']:GetActiveCalls()

for _, call in ipairs(calls) do
    print(call.id, call.type, call.street)
end
```

#### Returns

`table` — array of call objects.

Useful fields on each call:

| Field           | Type   | Notes                              |
| --------------- | ------ | ---------------------------------- |
| `id`            | number | Call ID                            |
| `type`          | string | Call type key                      |
| `typeLabel`     | string | Display label                      |
| `priority`      | number | Grade 1–4                          |
| `status`        | string | `'active'` / `'closed'`            |
| `location`      | table  | `{ x, y, z }` (not named `coords`) |
| `street`        | string | Location name                      |
| `postal`        | string | Postal                             |
| `description`   | string | Description                        |
| `callerNotes`   | string | Notes                              |
| `suspectInfo`   | string | Suspects                           |
| `vehicleInfo`   | string | Vehicle info                       |
| `createdBy`     | string | Creator                            |
| `createdAt`     | number | Unix timestamp                     |
| `attachedUnits` | table  | Units attached to the call         |

***

### TriggerPanic

**Side:** Client only

Triggers a Grade 1 officer assistance (`panic`) call at the local player’s current location.

```lua
exports['LG_Dispatch']:TriggerPanic()
```

#### Example

```lua
-- client.lua
exports['LG_Dispatch']:TriggerPanic()
```

#### Requirements

* The player must be an eligible emergency job
* The player must be **registered / on duty** in LG Dispatch

If those are not met, the export returns silently and **no call is created**.

#### What happens

1. A Grade 1 `panic` call is created
2. The officer’s current coords + street are used
3. The call is broadcast to eligible units
4. The panic sound plays if `Config.Sounds.panic = true`

Built-in command / keybind:

* Command: `/panic`
* Default key: `F9`

***

### Deduplication

LG Dispatch ignores similar calls to stop spam.

Defaults:

```lua
Config.DedupeRadius = 50.0  -- game units
Config.DedupeTime   = 30    -- seconds
```

A new call is skipped (export returns `nil`) when:

* an active call already exists with the **same type**
* within `DedupeRadius`
* created within the last `DedupeTime` seconds

This is intentional. If your script “sometimes doesn’t create a call”, check dedupe first.

***

### Common mistakes

| Problem                                | Cause                               | Fix                                                              |
| -------------------------------------- | ----------------------------------- | ---------------------------------------------------------------- |
| Export does nothing / errors on client | Calling server export from client   | Create a server event and call the export there                  |
| `No such export` / nil export          | Resource renamed                    | Keep folder name as `LG_Dispatch` or update export name          |
| Call returns `nil`                     | Deduplication                       | Wait, move further away, or adjust `DedupeRadius` / `DedupeTime` |
| Panic does nothing                     | Player not on duty / not registered | Ensure unit is registered in dispatch first                      |
| Marker at `0,0,0`                      | Missing/invalid `coords`            | Pass `{ x = ..., y = ..., z = ... }`                             |
| Wrong call label                       | Unknown `type`                      | Use a key from `Config.CallTypes`, or add your own               |

***

### Default Configuration

Below is the default-style configuration included with LG Dispatch.

{% hint style="info" %}
Edit `config.lua` only. Do not edit escrowed files.
{% endhint %}

```lua
Config = {}

-- Framework detection: 'auto', 'qbcore', 'esx', 'tmc', 'qbox'
Config.Framework = 'auto'

Config.UseLGModsCAD = false -- leave false... future script.

-- Keybind to open dispatch UI
Config.OpenKey = 'F6'

-- Jobs considered emergency services
Config.EligibleJobs = {
    ['police']    = { label = 'Police',    type = 'police', icon = 'shield-halved', color = '#3b82f6' },
    ['ambulance'] = { label = 'Ambulance', type = 'Ambulance', icon = 'heart-pulse',  color = '#22c55e' }
}

-- Unit statuses
Config.Statuses = {
    { id = 'available',  label = 'Available',  color = '#22c55e' },
    { id = 'busy',       label = 'Busy',       color = '#f59e0b' },
    { id = 'enroute',    label = 'En Route',   color = '#3b82f6' },
    { id = 'onscene',    label = 'On Scene',   color = '#8b5cf6' },
    { id = 'atstation',  label = 'At Station', color = '#64748b' },
    { id = 'offduty',    label = 'Off Duty',   color = '#6b7280' },
}

-- Call priorities
Config.Priorities = {
    { id = 1, label = 'Grade 1 - Immediate', color = '#ef4444' },
    { id = 2, label = 'Grade 2 - Prompt',    color = '#f59e0b' },
    { id = 3, label = 'Grade 3 - Standard',  color = '#3b82f6' },
    { id = 4, label = 'Grade 4 - Scheduled', color = '#64748b' },
}

-- Call types with defaults
Config.CallTypes = {
    ['999']       = { label = '999 Emergency Call',  defaultPriority = 2, blip = true,  blipSprite = 480, blipColor = 1,  blipDuration = 30, autoExpire = 1800 },
    ['panic']     = { label = 'Officer Assistance',  defaultPriority = 1, blip = true,  blipSprite = 526, blipColor = 1,  blipDuration = 60, autoExpire = 900  },
    ['robbery']   = { label = 'Robbery in Progress', defaultPriority = 1, blip = true,  blipSprite = 156, blipColor = 1,  blipDuration = 45, autoExpire = 1200 },
    ['shooting']  = { label = 'Firearms Discharge',  defaultPriority = 1, blip = true,  blipSprite = 110, blipColor = 1,  blipDuration = 45, autoExpire = 1200 },
    ['traffic']   = { label = 'Vehicle Stop',        defaultPriority = 3, blip = true,  blipSprite = 326, blipColor = 38, blipDuration = 20, autoExpire = 1800 },
    ['medical']   = { label = 'Medical Assistance',  defaultPriority = 2, blip = true,  blipSprite = 153, blipColor = 2,  blipDuration = 30, autoExpire = 1200 },
    ['fire_call'] = { label = 'Fire Incident',       defaultPriority = 2, blip = true,  blipSprite = 436, blipColor = 1,  blipDuration = 30, autoExpire = 1200 },
    ['general']   = { label = 'Incident Log',        defaultPriority = 3, blip = false, blipSprite = 1,   blipColor = 0,  blipDuration = 0,  autoExpire = 3600 },
}

-- GPS update interval (ms) for live unit tracking
Config.GPSUpdateInterval = 2000

-- Ignore similar calls within this radius (game units) and time (seconds)
Config.DedupeRadius = 50.0
Config.DedupeTime = 30

-- Sounds
Config.Sounds = {
    newCall = true,
    panic   = true,
}

-- Permissions (minimum job grade required per job)
-- Keys must match the job names in Config.EligibleJobs.
-- Use ['*'] as a fallback for any job not explicitly listed.
Config.Permissions = {
    closeCalls = {
        police    = 0,
        ambulance = 0,
    },
    editPriority = {
        police    = 2,
        ambulance = 2,
    },
    addNotes = {
        police    = 3,
        ambulance = 2,
    },
    createCalls = {
        police    = 0,
        ambulance = 0,
    },
    manageUnits = {
        police    = 2,
    },
    mergeCalls = {
        police    = 2,
    },
    placeMarkers = {
        police    = 2,
    },
}

-- Callsign validation Lua pattern (empty string = no validation)
-- Example: '^%u%u%d%d$' requires two uppercase letters + two digits
Config.CallsignRegex = ''

-- Show off-duty units on map
Config.ShowOffDutyOnMap = false

-- Default call expiry in seconds (0 = never)
Config.DefaultCallExpiry = 3600

-- Notification style: 'toast' | 'chat'
Config.NotificationStyle = 'toast'

-- Unit trail breadcrumb settings (stored in memory, reset on restart)
Config.UnitTrailLength = 50
Config.UnitTrailInterval = 3

-- Discord webhook for call notifications (leave empty to disable)
Config.DiscordWebhook = ''
Config.DiscordBotName = 'LG Dispatch'
Config.DiscordBotAvatar = 'https://media.discordapp.net/attachments/1238207587887874118/1384714689350729808/lg_logo_solo.png'
```


# LGMods Licensing

## LGMods Licensing

UK-style driving licence system for FiveM. Players apply at a front desk, receive a physical inventory item, and police can manage applications, points, bans, and revocations.

{% hint style="warning" %}
**Resource folder name must be `LGMods_Licensing`**

Exports are called as `exports['LGMods_Licensing']:...`. If you rename the resource folder, those calls (and inventory item export strings) will break unless you update them everywhere.
{% endhint %}

***

### Features

* Front desk offices (blips, optional NPCs, interact key) to apply for licences
* Licence categories with auto-issue or police approval
* Physical inventory item with metadata (where the inventory supports it)
* Police management UI: applications, search, points, ban, revoke, add category
* Penalty points with history and auto-expiry
* DVLA-style licence number generation
* ESX / QBCore frameworks
* ox\_inventory / qs-inventory / qb-inventory / ESX inventory

***

### Requirements

| Dependency                                         | Required                                      |
| -------------------------------------------------- | --------------------------------------------- |
| [oxmysql](https://github.com/overextended/oxmysql) | Yes                                           |
| ESX (`es_extended`) **or** QBCore (`qb-core`)      | Yes (one of them)                             |
| Matching inventory for `Config.InventorySystem`    | Yes                                           |
| ox\_lib                                            | Optional (notifications / menus when enabled) |

***

### Installation

1. Place the resource in your server resources folder as **`LGMods_Licensing`**.
2. Ensure start order: framework → inventory → oxmysql → this resource.

```cfg
ensure oxmysql
ensure es_extended   # or qb-core
ensure ox_inventory  # or your inventory
ensure LGMods_Licensing
```

3. Open `config.lua` and set:
   * `Config.Framework` - `'auto'`, `'esx'`, or `'qbcore'`
   * `Config.InventorySystem` - must match the inventory you actually use
4. Import `sql/install.sql` into your database (or let the script auto-create tables on start).
5. **Register the item `drivers_license` in your inventory** - see Inventory item setup. This is the most common cause of “exports / item not working”.
6. Set front desk coords, police jobs, costs, and categories as needed.
7. Restart the resource and test with `/mylicense` and the front desk.

{% hint style="info" %}
Tables are created automatically on start if missing. Running `sql/install.sql` manually is still recommended for clean installs.
{% endhint %}

***

### Configuration overview

All settings live in `config.lua`.

#### Framework & inventory

```lua
Config.Framework = 'auto' -- 'auto' | 'esx' | 'qbcore'
Config.InventorySystem = 'ox_inventory' -- 'ox_inventory' | 'qs-inventory' | 'qb-inventory' | 'esx'
```

#### Licence rules

* `Config.License.DefaultType` - `'full'` or `'provisional'`
* `Config.License.MaxPoints` - default `12` (licence treated as suspended at this total)
* `Config.License.PointExpiryDays` - default `84` (12 weeks)
* `Config.License.Categories` - each category has a `name` and `requiresApproval`

If `requiresApproval = false`, the licence / category is issued immediately at the front desk. If `true`, police must approve the application.

#### Front desk

* `MinAge` - default `17`
* `Cost` - cash cost (default `45`)
* `Locations` - coords, heading, blip
* `InteractionKey` - default `38` (E)
* `ShowBlips` / `SpawnNPCs`

#### Police

```lua
Config.Police = {
    RequiredJobs = {'police'},
    ShowLicenseDistance = 5.0
}
```

Add every job name that should access `/licenses` and police commands.

#### UI & exports

```lua
Config.UI.UseOxLib = true
Config.Exports.EnableAll = true -- keep this true
```

***

### Inventory item setup

{% hint style="danger" %}
**The item spawn name is hardcoded as `drivers_license`**

There is no config option to rename it. Your inventory item **must** be named exactly `drivers_license` (underscore, no spaces, no capital letters).
{% endhint %}

The script does **not** ship item definitions. You must add them to your inventory / framework yourself. If the item is missing, players can still get a DB licence but will not receive (or cannot use) the physical card.

#### Metadata the script writes

When a licence item is given, the script attaches:

| Field              | Description                     |
| ------------------ | ------------------------------- |
| `license_number`   | Raw licence number              |
| `formatted_number` | Spaced display form             |
| `name`             | Holder name                     |
| `dob`              | Date of birth                   |
| `type`             | `full` or `provisional`         |
| `categories`       | e.g. `A,B`                      |
| `points`           | Current penalty points          |
| `is_valid`         | Validity flag                   |
| `description`      | Short summary string            |
| `age`              | Calculated age (when available) |

* **ox\_inventory** stores this on `item.metadata`
* **qs-inventory / qb-inventory** store this on `item.info`
* **ESX** has no rich metadata - viewing pulls live data from the database

***

#### ox\_inventory

Set in config:

```lua
Config.InventorySystem = 'ox_inventory'
```

Add to `ox_inventory/data/items.lua` (or your items file):

```lua
['drivers_license'] = {
    label = 'Driving Licence',
    weight = 10,
    stack = false,
    close = true,
    consume = 0,
    client = {
        export = 'LGMods_Licensing.viewLicense'
    }
},
```

{% hint style="success" %}
**Recommended:** keep `stack = false` so each licence is unique and metadata does not merge incorrectly.
{% endhint %}

**Optional: buttons (view / show)**

If your ox\_inventory version supports item buttons, you can add:

```lua
['drivers_license'] = {
    label = 'Driving Licence',
    weight = 10,
    stack = false,
    close = true,
    consume = 0,
    client = {
        export = 'LGMods_Licensing.viewLicense'
    },
    buttons = {
        {
            label = 'Show to nearby',
            action = function(slot)
                exports['LGMods_Licensing']:showLicenseToNearby(slot)
            end
        }
    }
},
```

The resource also listens for ox item-use / right-click events for `drivers_license`, so using the item should open the licence UI once the item exists.

**Server export alternative**

If you prefer a **server** use export on the item:

```lua
['drivers_license'] = {
    label = 'Driving Licence',
    weight = 10,
    stack = false,
    close = true,
    consume = 0,
    server = {
        export = 'LGMods_Licensing.useDriversLicense'
    }
},
```

Both `viewLicense` and `useDriversLicense` are provided for inventory wiring.

Add an image as `ox_inventory/web/images/drivers_license.png` (optional but recommended).

***

#### qb-inventory (QBCore)

Set in config:

```lua
Config.InventorySystem = 'qb-inventory'
```

Add to `qb-core/shared/items.lua` (or your items shared file):

```lua
drivers_license = {
    name = 'drivers_license',
    label = 'Driving Licence',
    weight = 10,
    type = 'item',
    image = 'drivers_license.png',
    unique = true,
    useable = true,
    shouldClose = true,
    combinable = nil,
    description = 'A UK driving licence'
},
```

{% hint style="info" %}
`unique = true` and `useable = true` are important. Metadata is stored in `info`.
{% endhint %}

Place `drivers_license.png` in your inventory images folder (commonly `qb-inventory/html/images/`).

The script listens for `qb-inventory:client:UseItem` when the item name is `drivers_license`.

***

#### qs-inventory

Set in config:

```lua
Config.InventorySystem = 'qs-inventory'
```

Register the item in your qs-inventory items list / database with spawn name:

```
drivers_license
```

Example shared-style definition (adjust to your qs-inventory format):

```lua
['drivers_license'] = {
    name = 'drivers_license',
    label = 'Driving Licence',
    weight = 10,
    type = 'item',
    image = 'drivers_license.png',
    unique = true,
    useable = true,
    shouldClose = true,
    description = 'A UK driving licence'
},
```

The script listens for `qs-inventory:client:UseItem`. Metadata is stored in `info`.

If qs-inventory fails to add the item, the script may fall back to ESX `addInventoryItem` - the item must still exist in both places if you rely on that fallback.

***

#### ESX default inventory

Set in config:

```lua
Config.InventorySystem = 'esx'
```

Add the item to your `items` table (SQL example):

```sql
INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`)
VALUES ('drivers_license', 'Driving Licence', 1, 0, 1);
```

Or via your items management resource - spawn name must still be `drivers_license`.

{% hint style="warning" %}
ESX inventory does **not** store rich metadata on the item. Viewing the licence loads data from the LGMods database instead. Players can also use `/mylicense`.
{% endhint %}

If you use a usable-item system that fires `esx:useItem`, the script will open the licence UI for `drivers_license`.

***

### Quick checklist (item not working)

1. Config `InventorySystem` matches the inventory that is actually running.
2. Item name is exactly `drivers_license`.
3. Resource folder is exactly `LGMods_Licensing`.
4. Item is registered **and** the inventory was restarted after adding it.
5. Player has space / can carry the item (especially ox\_inventory).
6. For ox: `client.export` / `server.export` points at `LGMods_Licensing.viewLicense` or `LGMods_Licensing.useDriversLicense`.
7. For QB/QS: item is `useable = true` / `unique = true`.

***

### How the system works

#### Getting a licence

1. Go to a configured front desk location and press **E** (or your interaction key).
2. Choose licence type and category.
3. Age and cash are checked (`MinAge`, `Cost`).
4. If the category does **not** require approval → licence is created and the `drivers_license` item is given.
5. If it **does** require approval → an application is created and police are notified. On approval, the licence/category is granted and the item is given/updated.

#### Using the item

* Use the item in inventory to open the licence UI.
* Show to nearby players (within \~5m where supported).
* Police can verify against the database.

#### Validity

A licence is treated as **invalid** if:

* It is revoked
* It is banned (`banned_until` still in the future)
* Points are at or above `Config.License.MaxPoints` (default 12)

Points expire after `PointExpiryDays` and are cleaned up automatically.

***

### Commands

#### Everyone

| Command        | Description                  |
| -------------- | ---------------------------- |
| `/mylicense`   | View your own licence status |
| `/licensehelp` | Show available commands      |

#### Police (jobs in `Config.Police.RequiredJobs`)

| Command             | Usage                                               |
| ------------------- | --------------------------------------------------- |
| `/licenses`         | Open police licence management UI                   |
| `/addpoints`        | `/addpoints [id] [1-12] [reason]`                   |
| `/removepoints`     | `/removepoints [id] [points]`                       |
| `/banlicense`       | `/banlicense [id] [days] [reason]`                  |
| `/unbanlicense`     | `/unbanlicense [id]`                                |
| `/revokelicense`    | `/revokelicense [id] [reason]`                      |
| `/reinstatelicense` | `/reinstatelicense [id]`                            |
| `/grantlicense`     | `/grantlicense [id] [full\|provisional] [category]` |

`[id]` is the player’s **server ID**.

***

### Exports (for other scripts)

{% hint style="info" %}
For other resources, use the **player ID (server source)** exports below. Always call them with the resource name:

`exports['LGMods_Licensing']:ExportName(...)`
{% endhint %}

#### Recommended public API (server)

These are the exports you should use from other scripts.

**GrantLicense**

Creates a licence in the database and gives the inventory item.

```lua
local success, result = exports['LGMods_Licensing']:GrantLicense(playerId, 'full', 'B')
-- success = true/false
-- result = license number on success, or error message on failure
```

* `playerId` (number) - required
* `licenseType` (string) - `'full'` or `'provisional'` (default `'full'`)
* `category` (string) - e.g. `'B'` (default `'B'`)

Fails if the player already has a licence.

**RevokePlayerLicense**

```lua
local success, message = exports['LGMods_Licensing']:RevokePlayerLicense(playerId, 'Fraud')
```

**BanPlayerLicense**

```lua
local success, message = exports['LGMods_Licensing']:BanPlayerLicense(playerId, 7, 'Dangerous driving')
-- banDuration is in days
```

**UnbanPlayerLicense**

```lua
local success, message = exports['LGMods_Licensing']:UnbanPlayerLicense(playerId)
```

**ReinstatePlayerLicense**

```lua
local success, message = exports['LGMods_Licensing']:ReinstatePlayerLicense(playerId)
```

**AddPoints / RemovePoints**

```lua
local success, message = exports['LGMods_Licensing']:AddPoints(playerId, 3, 'Speeding')
local success, message = exports['LGMods_Licensing']:RemovePoints(playerId, 2)
```

**HasValidLicense**

```lua
local isValid, reason = exports['LGMods_Licensing']:HasValidLicense(playerId)
if not isValid then
    print(reason) -- e.g. "No license", "License revoked", "License banned", "License suspended (12+ points)"
end
```

**HasLicense**

```lua
local hasLicense = exports['LGMods_Licensing']:HasLicense(playerId) -- true/false
```

**GetPlayerLicenseStatus**

```lua
local license = exports['LGMods_Licensing']:GetPlayerLicenseStatus(playerId)
if license then
    print(license.license_number, license.points, license.type)
end
```

**GetLicenseByNumber**

```lua
local license = exports['LGMods_Licensing']:GetLicenseByNumber(licenseNumber)
```

**GetPlayerPointsHistory**

```lua
local history = exports['LGMods_Licensing']:GetPlayerPointsHistory(playerId, 10)
-- second arg is optional limit (default 10)
```

#### Inventory / item-use exports (server)

Used when wiring inventory items - not usually needed for gameplay scripts.

```lua
exports['LGMods_Licensing']:viewLicense(playerId, item)
exports['LGMods_Licensing']:showLicenseToPlayer(playerId, targetId, item)
exports['LGMods_Licensing']:useDriversLicense(playerId, item)
```

#### Inventory helpers (server)

Useful if you need to give/remove/update the physical item yourself:

| Export                                             | Purpose                      |
| -------------------------------------------------- | ---------------------------- |
| `GiveLicenseItem(playerId, licenseData)`           | Give the item with metadata  |
| `RemoveLicenseItem(playerId, licenseNumber)`       | Remove matching item         |
| `UpdateLicenseItemMetadata(playerId, licenseData)` | Refresh item metadata        |
| `HasLicenseItem(playerId, licenseNumber)`          | Check if player has the card |
| `RemoveAllLicenseItems(playerId)`                  | Remove all licence items     |
| `GetLicenseMetadata(licenseData)`                  | Build metadata table         |

Example:

```lua
local license = exports['LGMods_Licensing']:GetPlayerLicenseStatus(playerId)
if license then
    exports['LGMods_Licensing']:GiveLicenseItem(playerId, license)
end
```

#### Client exports (UI / item)

```lua
-- Open / close licence UI
exports['LGMods_Licensing']:ShowLicenseUI(licenseData)
exports['LGMods_Licensing']:HideLicenseUI()

-- Item helpers
exports['LGMods_Licensing']:viewLicense(item)
exports['LGMods_Licensing']:showLicenseToNearby(item)
```

For ox\_inventory item definitions, the usual string is:

```
LGMods_Licensing.viewLicense
```

***

### Example integrations

#### Block driving without a valid licence

```lua
-- server-side example
RegisterNetEvent('your_resource:checkCanDrive', function()
    local src = source
    local ok, reason = exports['LGMods_Licensing']:HasValidLicense(src)
    if not ok then
        TriggerClientEvent('ox_lib:notify', src, {
            title = 'Licence',
            description = reason or 'No valid driving licence',
            type = 'error'
        })
        return
    end
    -- allow whatever you need
end)
```

#### Add points from another script

```lua
local success, message = exports['LGMods_Licensing']:AddPoints(targetId, 3, 'Ran red light')
```

#### Grant a licence from an admin menu

```lua
local success, licenseNumber = exports['LGMods_Licensing']:GrantLicense(targetId, 'full', 'B')
if success then
    print('Granted: ' .. licenseNumber)
else
    print('Failed: ' .. tostring(licenseNumber))
end
```

***

### Database

Default tables (names configurable in `Config.Database`):

* `lgmods_licenses` - main licence records (one per citizen)
* `lgmods_license_points` - points history
* `lgmods_license_applications` - pending / processed applications

SQL file: `sql/install.sql`.

***

### Troubleshooting

#### “Exports don’t work”

1. Resource name is `LGMods_Licensing` (exact).
2. Resource is started before the script that calls the export.
3. You are calling **server** exports from the **server**, and client exports from the **client**.
4. `Config.Exports.EnableAll` is `true`.
5. Use `exports['LGMods_Licensing']:HasValidLicense(source)` - not a made-up export name.

#### “Player got approved but no item”

1. Item `drivers_license` is not registered in the inventory.
2. Wrong `Config.InventorySystem`.
3. Inventory inventory is full / cannot carry.
4. Inventory resource was not restarted after adding the item.
5. On ESX, confirm the row exists in the `items` table.

#### “Using the item does nothing”

1. ox: missing `client.export` / `server.export`, or export string typo.
2. QB/QS: item not marked useable.
3. Item name is not exactly `drivers_license`.
4. Metadata missing (old/admin-given item without metadata) - try `/mylicense` or re-grant via `/grantlicense` / police tools.

#### “Police commands say no permission”

Add the player’s **exact** job name to `Config.Police.RequiredJobs` (e.g. `'police'`, `'sheriff'`).

#### Categories missing in the menu

Any category you add under `Config.License.Categories` should appear after a resource restart. Make sure the key and `name` / `requiresApproval` fields are valid Lua.

***

### Support notes

* Keep `config.lua` edits only - that file is listed for escrow ignore.
* Do not rename the item away from `drivers_license` unless you are prepared to edit the script itself.
* Prefer the player-ID exports (`GrantLicense`, `BanPlayerLicense`, `AddPoints`, etc.) for third-party integrations.


# UK Banking

LGMods\_Banking is a professional banking system for FiveM servers. This documentation outlines all available server-side exports for integration with external resources.

***

### Important

All exports must be used **server-side only.**

Using these exports client-side will not work.

***

## AddMoney 💰

Adds funds to a personal or business account.

#### Export

```lua
exports["LGMods_Banking"]:AddMoney(playerId, amount, accountType, businessName)
```

#### Parameters

| Parameter    | Type   | Required      | Description                            |
| ------------ | ------ | ------------- | -------------------------------------- |
| playerId     | number | Yes           | Player server ID                       |
| amount       | number | Yes           | Amount to add (must be greater than 0) |
| accountType  | string | Yes           | "personal" or "business"               |
| businessName | string | Business only | Business/job name (e.g. "lscustoms")   |

#### Returns

boolean\
Returns true if accepted, otherwise false.

#### Example

```lua
-- Add to personal account
exports["LGMods_Banking"]:AddMoney(source, 2500, "personal")

-- Add to business account
exports["LGMods_Banking"]:AddMoney(source, 5000, "business", "lscustoms")
```

#### Behaviour

• Sends an in-game notification\
• Inserts a transaction into lgmods\_banking\_transactions\
• Refreshes relevant UI data

***

## RemoveMoney 💸

Removes funds from a personal or business account.

#### Export

```lua
exports["LGMods_Banking"]:RemoveMoney(playerId, amount, accountType, businessName)
```

#### Parameters

| Parameter    | Type   | Required      | Description                               |
| ------------ | ------ | ------------- | ----------------------------------------- |
| playerId     | number | Yes           | Player server ID                          |
| amount       | number | Yes           | Amount to remove (must be greater than 0) |
| accountType  | string | Yes           | "personal" or "business"                  |
| businessName | string | Business only | Business/job name                         |

#### Returns

boolean\
Returns true on success, false on failure.

#### Business Withdrawal Permissions

When removing money from a business account:

• Player must have the matching job name\
• Player must meet Config.BusinessAccounts\[businessName].minGrade

If either condition fails, the withdrawal is denied.

#### Example

```lua
exports["LGMods_Banking"]:RemoveMoney(source, 1000, "personal")

exports["LGMods_Banking"]:RemoveMoney(source, 2500, "business", "lscustoms")
```

***

## AddTransaction 🧾

Manually inserts a transaction entry into the banking history.

#### Export

```lua
exports["LGMods_Banking"]:AddTransaction(playerId, transactionType, amount, accountType, note, businessName)
```

#### Parameters

| Parameter       | Type   | Required      | Description                    |
| --------------- | ------ | ------------- | ------------------------------ |
| playerId        | number | Yes           | Player server ID               |
| transactionType | string | Yes           | Example: "Purchase", "Payroll" |
| amount          | number | Yes           | Must be greater than 0         |
| accountType     | string | Yes           | "personal" or "business"       |
| note            | string | Optional      | Custom description             |
| businessName    | string | Business only | Business/job name              |

#### Returns

boolean

#### Example

```lua
-- Personal transaction
exports["LGMods_Banking"]:AddTransaction(
    source,
    "Vehicle Purchase",
    25000,
    "personal",
    "Bought Sultan RS"
)

-- Business transaction
exports["LGMods_Banking"]:AddTransaction(
    source,
    "Payroll",
    10000,
    "business",
    "Weekly wages",
    "lscustoms"
)
```

***

## GetAccountDetails 🏦

Retrieves account information for personal or business accounts.

This export is callback-based due to asynchronous database queries.

#### Export

```lua
exports["LGMods_Banking"]:GetAccountDetails(playerId, accountType, businessName, callback)
```

#### Parameters

| Parameter    | Type     | Required      | Description              |
| ------------ | -------- | ------------- | ------------------------ |
| playerId     | number   | Yes           | Player server ID         |
| accountType  | string   | Yes           | "personal" or "business" |
| businessName | string   | Business only | Business/job name        |
| callback     | function | Yes           | Receives result object   |

#### Callback Response

On success (Personal):

success = true\
account.identifier\
account.balance\
account.sortcode\
account.accountnumber

On success (Business):

success = true\
account = row from lgmods\_business\_accounts

On failure:

success = false\
error = reason string

#### Example

```lua
exports["LGMods_Banking"]:GetAccountDetails(source, "personal", nil, function(data)
    if data.success then
        print("Balance:", data.account.balance)
    end
end)
```

***

## TransferMoney 🔁

Initiates a transfer from a personal or business account.

#### Export

```lua
exports["LGMods_Banking"]:TransferMoney(playerId, amount, fromType, toSortcode, toAccountnumber, businessName)
```

#### Parameters

| Parameter       | Type   | Required      | Description                      |
| --------------- | ------ | ------------- | -------------------------------- |
| playerId        | number | Yes           | Player initiating transfer       |
| amount          | number | Yes           | Must be greater than 0           |
| fromType        | string | Yes           | "personal" or "business"         |
| toSortcode      | string | Yes           | Destination sort code            |
| toAccountnumber | string | Yes           | Destination account number       |
| businessName    | string | Business only | Required if fromType is business |

#### Returns

boolean

#### Example

```lua
exports["LGMods_Banking"]:TransferMoney(
    source,
    2500,
    "personal",
    "12-34-56",
    "12345678"
)

exports["LGMods_Banking"]:TransferMoney(
    source,
    5000,
    "business",
    "12-34-56",
    "12345678",
    "lscustoms"
)
```

***

## Database Requirements 🗄

#### Required Tables

• lgmods\_banking\_transactions\
• lgmods\_business\_accounts

#### Framework Integration

ESX

• users.identifier\
• users.sortcode\
• users.accountnumber

QBCore

• players.citizenid\
• players.sortcode\
• players.accountnumber

***

## Dependencies 🔧

• oxmysql\
• ESX or QBCore\
• Correct Config.Framework configuration


# LGMods AXON Body 4 - Bodycam and Recording System

##

Welcome to the official documentation for the **LGMods AXON Body 4 Bodycam Resource**. This resource provides a realistic, minimalist bodycam overlay for FiveM, inspired by real-world AXON Body 4 devices used by UK and International police forces.

### Installation

Follow these steps to install the resource on your server:

1. **Download & Extract**: Download the resource folder and extract it into your server's `resources` directory. Ensure the folder is named `LG_BWV`.
2. **Configuration**: Open `config.lua` and configure your settings (Webhook URLs, Framework, etc.).
3. **Server Config**: Add the following to your `server.cfg`:

   ```lua
   ensure screencapture
   ensure LG_BWV
   ```
4. **Dependencies**: This resource requires `screencapture` for video and screenshot functionality. Ensure it is installed and started before  `LG_BWV`. You can install screencapture via <https://github.com/itschip/screencapture> installation guide.

{% hint style="info" %}
**ℹ️ Note**\
These instructions assume you have a working FiveM server that you can already connect to.\
For help setting up a FiveM server, see: [FiveM Server Setup Guide](https://docs.fivem.net/docs/server-manual/setting-up-a-server/)
{% endhint %}

### Configuration (`config.lua`)

Since this resource is delivered with encryption (Tebex), the `config.lua` is your primary tool for customization. Below are the key sections you can modify:

#### General & Framework

* `Config.Framework`: Set to `'standalone'`, `'esx'`, or `'qbcore'`.

```lua
Config.ResourceName = 'bodycam'

Config.Debug = false

Config.Framework = 'standalone' -- 'standalone', 'esx', 'qbcore'
```

#### Display Settings

```
Config.Bodycam = {
    model = 'AXON BODY 4',                  -- The exact model name shown in the top-left corner
    forceNumber = '',                       -- Officer / unit force number (e.g. 'PC 1234' or 'Unit A-41'). Leave empty to hide.
    department = 'METROPOLITAN POLICE',     -- Full department name (shown when enabled)
    departmentShort = 'MET',                -- Short/abbreviated version (e.g. 'MET', 'BTP', 'NCA')
    divisionPrefix = 'PC',                  -- Rank/prefix before officer ID (e.g. 'PC', 'SGT', 'DC')
    showOfficerName = true,                 -- Display the player's in-game name / RP name
    showOfficerId = true,                   -- Show officer ID / badge number (usually combined with prefix)
    showDepartment = true,                  -- Show full or short department name
    showDateTime = true,                    -- Show current date and time (real server time)
    showBattery = true,                     -- Display battery icon + percentage
    showGPS = true,                         -- Show live GPS coordinates / street name 
    showSignalStrength = true,              -- Show mobile/cellular signal bars
    showRecordingIndicator = true,          -- Red "REC" dot + pulsing animation when actively recording
    dateFormat = 'YYYY-MM-DD',              -- Date format 
    -- NOTE: Timezone suffix "-0400" is currently fixed in UI (
    timeFormat = '24h',                     -- '24h' or '12h' (12-hour adds AM/PM)
    batteryLevel = 87,                      -- Static battery % for testing/preview (real value can be dynamic)
    signalBars = 4,                         -- Static signal strength (1–5 bars) for preview
    overlayOpacity = 0.85,                  -- Overall transparency of the entire overlay (0.0–1.0)
    scanlineEffect = true,                  -- Classic CRT-style rolling scanlines across the screen
    vignetteEffect = true,                  -- Darkened edges (lens vignette) for realistic camera look
    staticNoiseOnToggle = true,             -- Brief static/interference burst when turning on/off
    recordingPulseAnimation = true,         -- Pulsing red REC indicator when recording is active
    showWatermark = true,                   -- Show bottom watermark text
    watermarkText = 'AXON EVIDENCE.COM',    -- Customizable evidence watermark (or remove by setting showWatermark = false)
    cameraId = 'X81-',                      -- Camera serial/ID prefix (e.g. 'X81-4721')
    firmwareVersion = 'FW 2.1.0.12',        -- Firmware version shown in overlay (adds realism)
}
```

#### Sound Settings&#x20;

The \`Config.Sounds\` table controls the audio feedback players hear when interacting with the bodycam  specifically the activation and deactivation sounds. These subtle but immersive sound effects help sell the realism of turning a professional-grade bodycam on or off, similar to real AXON Body 4 devices.

```
Config.Sounds = {
    enabled          = true,      -- Master toggle: enable/disable all bodycam-related sounds
    activateSound    = true,      -- Play activation beep/chirp when turning bodycam ON
    deactivateSound  = true,      -- Play deactivation tone when turning bodycam OFF
    volume           = 0.5,       -- Global volume level for bodycam sounds (0.0 = silent, 1.0 = full volume)
}
```

####

#### Discord Integration Configuration (`Config.Discord`)

The `Config.Discord` table controls all Discord webhook logging, notifications, screenshots, and video uploads triggered by bodycam events. When enabled, every activation, deactivation, or configured media capture sends a clean, formatted embed to your Discord channel — perfect for dispatch logging, evidence archiving, or supervisor monitoring.

```lua
Config.Discord = {
    enabled = true,                           -- Master toggle: enable/disable ALL Discord logging and media sending
    webhookURL = 'https://discord.com/api/webhooks/...',  -- Main webhook for text logs and embeds
    botName = 'AXON Bodycam System',          -- Name shown for webhook messages
    botAvatar = 'https://.../image.png',      -- Avatar/icon for the bot (URL to a .png/.jpg)
    embedColour = 3066993,                    -- Embed sidebar color (decimal RGB, e.g. 3066993 = #2ECC71 green)
    footerText = 'AXON Evidence | Metropolitan Police',  -- Footer text on every embed
    footerIcon = '',                          -- Small icon next to footer (URL, optional)
    sendOnActivate = true,                    -- Send embed when bodycam is turned ON
    sendOnDeactivate = true,                  -- Send embed when bodycam is turned OFF
    sendScreenshot = true,                    -- Enable screenshot sending (requires screencapture)
    screenshotOnActivate = true,              -- Capture & send screenshot on activation
    screenshotOnDeactivate = false,           -- Capture & send screenshot on deactivation
    screenshotInterval = 0,                   -- Auto-capture every X seconds while active 
    screenshotWebhookURL = '',                -- Separate webhook for screenshots (leave empty to use main webhookURL)
    sendVideo = true,                         -- Enable video clip sending (requires screencapture)
    videoOnActivate = true,                   -- Start & send video clip on activation (duration configurable elsewhere)
    videoOnDeactivate = false,                -- Send final clip when deactivating
    videoWebhookURL = '',                     -- Separate webhook for video files (leave empty to use main webhookURL)
    logPlayerName = true,                     -- Include player's RP/in-game name in logs
    logPlayerId = true,                       -- Include server ID (e.g. #5)
    logPlayerIdentifiers = true,              -- Include steam/fivem/discord identifiers
    logCoordinates = true,                    -- Include exact X,Y,Z coordinates at time of event
    logStreetName = true,                     -- Include nearest street name / zone (if available)
    logTimestamp = true,                      -- Include real server time of event

    mentionRoleOnActivate = false,            -- Ping a role when bodycam activates (e.g. for urgent calls)
    mentionRoleId = '',                       -- Discord role ID to mention (e.g. '123456789012345678')
}
```

### Framework Integration & Permissions (`Config.FrameworkIntegration`)

This section controls **who can use the bodycam** and under what conditions.\
It supports job restrictions, item requirements, duty checks, ACE permissions, and more — making it easy to fit the bodycam into police-only RP, emergency services, or custom setups.

```lua
Config.FrameworkIntegration = {
    -- ITEM REQUIREMENT (QBCore / ESX only)
    requireItem          = false,          -- Must have a bodycam item in inventory to toggle
    itemName             = 'bodycam',      -- Inventory item name (e.g. 'bodycam', 'policebodycam')
    removeItemOnUse      = false,          
    returnItemOnDeactivate = false,        -- Give item back when turning OFF
    useItemToToggle      = true,           -- Use the item to toggle (if requireItem = true)
    registerUsableItem   = true,           -- Auto-register item as usable (/use bodycam)

    -- JOB RESTRICTIONS
    restrictToJobs       = true,           -- Only allow specific jobs to use bodycam
    allowedJobs = {
        ['police']    = { enabled = true, minGrade = 0, label = 'Police' },
        ['ambulance'] = { enabled = true, minGrade = 0, label = 'Ambulance' },
        ['sheriff']   = { enabled = true, minGrade = 0, label = 'Sheriff' },
        ['fbi']       = { enabled = true, minGrade = 0, label = 'FBI' },
        -- Add or remove jobs as needed
        -- Example with grade restriction:
        -- ['police'] = { enabled = true, minGrade = 2, label = 'Police (Sergeant+)' },
    },
    -- DUTY REQUIREMENT (QBCore / ESX)
    restrictToDuty       = false,          -- Must be on duty to use bodycam
    
    -- GANG SUPPORT (QBCore only)
    allowGangs           = false,          -- Allow gang members to use bodycam
    allowedGangs = {
        ['lostmc']    = { enabled = false, minGrade = 0, label = 'Lost MC' },
        ['ballas']    = { enabled = false, minGrade = 0, label = 'Ballas' },
        -- Add gangs here if allowGangs = true
    },

    -- ACE PERMISSIONS (FiveM native)
    restrictToAcePermission = false,       -- Use ACE perms instead of (or with) jobs
    acePermission        = 'bodycam.use',  -- Permission node required (e.g. group.admin)
```

#### Auto-Trigger Events

Lua

```
Config.autoTrigger = {
    weaponDraw   = true,
    takeDamage   = true,
    vehicleEnter = false
    -- etc.
}
```

#### AXON Logo Customization

* Format: .png (transparent background recommended)
* File: html/img/axon\_logo.png
* Recommended: \~45px height (width auto-scales)
* Ideal canvas: 150 × 45 px

#### &#x20;Video Recording Configuration (\`Config.VideoRecording\`)

This section controls the automatic video recording feature of the bodycam. When enabled, the resource captures gameplay footage from the moment the bodycam is activated until it is deactivated, then automatically uploads the clip to Discord (via the configured webhook).

```
Config.VideoRecording = {
    enabled = true,     -- Master toggle: enable/disable video recording entirely
    fps     = 30,       -- Frames per second for the captured video (higher = smoother, but larger files & more CPU)
    quality = 0.6,      -- Video quality/compression level (0.0–1.0)
                        
}
```

### Advanced Settings Configuration (Config.Advanced)

These settings fine-tune bodycam behavior, safety features, performance, and realism — especially useful for preventing abuse, handling edge cases, and optimizing server performance.

```
Config.Advanced = {
    cooldown              = 3,            -- Seconds before player can toggle bodycam again (anti-spam)
    autoDeactivateOnDeath = true,         -- Automatically turn off bodycam when player dies
    autoDeactivateOnDisconnect = true,    -- Turn off bodycam if player disconnects
    persistOnReconnect    = false,        -- Keep bodycam active state after reconnect (if true + autoDeactivateOnDisconnect = false)
    syncWithOtherPlayers  = false,        
    maxRecordingTime      = 40,           -- second
   

    gpsUpdateInterval     = 5,            -- How often GPS coordinates update in overlay (seconds)
    timestampUpdateInterval = 1,          -- How often date/time refreshes (seconds, usually 1 for real-time feel)
}
```

### Commands

| Command                  | Description                                 | Access               |
| ------------------------ | ------------------------------------------- | -------------------- |
| /togglebodycam           | Toggle bodycam on/off (also bound to key B) | Allowed players      |
| /bodycam\_status         | View all active bodycams                    | Server console/admin |
| /bodycam\_forceoff \[id] | Force deactivate a player's bodycam         | Server console/admin |
| /bodycam\_forceon \[id]  | Force activate a player's bodycam           | Server console/admin |
| /bodycam\_monitor        | Live remote view of active unit bodycams    | Force managers       |

### Exports

All exports are **client-side** unless otherwise noted.

Lua

```
exports['bodycam']:IsBodycamActive()      -- Returns boolean
exports['bodycam']:ToggleBodycam()        -- Toggle on/off
exports['bodycam']:ActivateBodycam()      -- Force activate
exports['bodycam']:DeactivateBodycam()    -- Force deactivate
```

Use these in other scripts (e.g. panic button → force activate, dispatch → check status).

### Support

For help with installation, configuration, bugs, or feature requests: Join the **LGMods Discord** server and open a support ticket.

Made with ♥ by LGMods


# UK Active Station (QB/ESX)

Welcome to the official documentation for the UK Active Station **Resource**.

&#x20;***LGMods ActiveStation*** is the ultimate police station management system that transforms your law enforcement facility into a fully interactive and immersive environment. Designed specifically for the LGMods UK Police Station (Sinner Street), this comprehensive script brings every aspect of police station operations to life with realistic features and seamless roleplay integration.

### Installation

Follow these steps to install the resource on your server:

1. **Download & Extract**: Download the resource folder and extract it into your server's `resources` directory. Ensure the folder is named `LGMods_ActiveStation`.
2. **Configuration**: Open `config.lua` and configure your settings (Framework, etc.).
3. **Server Config**: Add the following to your `server.cfg`:

   ```lua
   ensure LGMods_ActiveStation
   ```

{% hint style="info" %}
**ℹ️ Note**\
These instructions assume you have a working FiveM server that you can already connect to.\
For help setting up a FiveM server, see: [FiveM Server Setup Guide](https://docs.fivem.net/docs/server-manual/setting-up-a-server/)
{% endhint %}

### General & Framework Settings

#### Framework Configuration

**Config.Framework**\
Set your server framework.

**Options:**

* `'qbcore'`
* `'esx'`
* `'auto'` (recommended – automatically detects your framework)

```
Config.Framework = 'auto' -- 'qbcore', 'esx', or 'auto'
```

***

#### Target System

**Config.TargetSystem**\
Choose which targeting system your server uses.

**Options:**

* `'ox_target'`
* `'qb-target'`

```
Config.TargetSystem = 'ox_target' -- 'ox_target' or 'qb-target'
```

***

#### Law Enforcement Job Access

**Config.LawEnforcementJobs**\
Define which jobs are allowed to access the system.\
Set a job name to `true` to grant permission.

```
Config.LawEnforcementJobs = {
    ['police'] = true
}
```

***

#### LGMods MDT Integration

**Config.useLGModsMDT**\
Enable this only if you have the LGMods MDT resource installed.

```
Config.useLGModsMDT = false
```

***

#### Station Configuration

**Config.StationName**\
The name of the station used in alerts, logs, or UI display.

```
Config.StationName = "Sinner Street Station"
```

***

#### Alarm Test Duration

**Config.AlarmTestDuration**\
Duration (in seconds) for alarm test functionality.

```
Config.AlarmTestDuration = 10
```

### Alarm Configuration

#### Sinner Street Station Alarm

```
-- Alarm config for Sinner Street Station
Config.AlarmSound = {
    enabled = true,          # Enable or disable the alarm sound
    volume = 100,            # Alarm volume level (0–100)
    file = "sounds/alarm.mp3", # Path to the alarm sound file
    distance = 100.0         # Maximum distance (in game units) the alarm can be heard
}
```

***

### Inventory Configuration

```
Config.Inventory = {
    System = "ox_inventory", # Inventory system: qb-inventory, ox_inventory, esx
    WeightUnit = "g",        # Weight measurement unit (recommended: g)
    UseSerialNumbers = true, # Enable or disable serial number generation
    SerialFormat = "UKPS-%d%d%d%d%d", # Format used for generated serial numbers
    Debug = false            # Enable debug logging for troubleshooting
}
```

***

### Sandy Station Fire Alarm Configuration

#### Fire Alarm Sound

```
-- Alarm config for Sandy Station
Config.FireAlarmSound = {
    enabled = true,            # Enable or disable fire alarm sound
    volume = 80,               # Alarm volume level (0–100)
    file = "sounds/fire_alarm.MP3", # Path to the fire alarm sound file
    distance = 150.0           # Maximum audible distance
}
```

***

#### Fire Alarm Lights

```
Config.FireAlarmLights = {
    enabled = true,          # Enable or disable red flashing lights
    flashOnDuration = 800,   # Duration (ms) the light stays ON
    flashOffDuration = 400,  # Duration (ms) the light stays OFF
    lightColor = {255, 0, 0}, # RGB light color (default red)
    lightRange = 3.0,        # Radius of the light effect
    lightIntensity = 100.0   # Brightness level (0–255)
}
```

### Armory Configuration

```
Config.ArmoryLocation = vector3(488.44, -997.49, 30.69) # Location of the armory interaction point
Config.ArmoryPin = "4321"                               # PIN code required to access the armory
Config.ArmoryRange = 1.5                                 # Interaction distance from the armory location
```

***

### Equipment Checkout Items

```
Config.BodycamItem = "phone"          # Item received when checking out a bodycam
Config.TaserItem = "WEAPON_STUNGUN"   # Item received when checking out a taser
```

***

### Debug Mode

```
Config.Debug = true # Enable console debug messages for troubleshooting
```

***

### Mugshot System Configuration

```
Config.MugshotSystem = {
    DiscordWebhook = {
        enabled = true,             # Enable or disable Discord webhook integration
        url = "discord_webhook_here", # Replace with your Discord webhook URL
        embedColor = 3447003,       # Embed sidebar color (decimal format, 3447003 = blue)
    }
}
```

### Clothing Station Configuration

```
Config.ClothingStations = {
    {
        id = "sinner_street_station", -- Unique identifier for this clothing station
        location = vector3(456.0962, -988.3626, 30.6898), -- World location of the clothing station
        heading = 5.0585, -- Player heading when opening the clothing menu
        range = 2.0, -- Interaction distance required to access the station
        menuTitle = "Sinner Street Station - Clothing", -- Title displayed in the clothing menu

        outfits = {
            {
                name = "Police Uniform", -- Outfit display name
                description = "Standard police officer uniform", -- Outfit description shown in menu
                components = {
                    ["torso"] = { drawableId = 11, textureId = 0, paletteId = 0 }, -- Jacket / upper body
                    ["undershirt"] = { drawableId = 15, textureId = 0, paletteId = 0 }, -- Undershirt
                    ["legs"] = { drawableId = 4, textureId = 0, paletteId = 0 }, -- Trousers
                    ["shoes"] = { drawableId = 10, textureId = 0, paletteId = 0 }, -- Footwear
                    ["accessory"] = { drawableId = 0, textureId = 0, paletteId = 0 }, -- Accessories (radio, etc.)
                    ["kevlar"] = { drawableId = 0, textureId = 0, paletteId = 0 } -- Body armour
                }
            },

            {
                name = "Detective Outfit", -- Outfit display name
                description = "Plain clothes detective outfit", -- Outfit description
                components = {
                    ["torso"] = { drawableId = 4, textureId = 0, paletteId = 0 },
                    ["undershirt"] = { drawableId = 4, textureId = 0, paletteId = 0 },
                    ["legs"] = { drawableId = 0, textureId = 0, paletteId = 0 },
                    ["shoes"] = { drawableId = 1, textureId = 0, paletteId = 0 },
                    ["accessory"] = { drawableId = 0, textureId = 0, paletteId = 0 },
                    ["kevlar"] = { drawableId = 0, textureId = 0, paletteId = 0 }
                }
            },

            {
                name = "Tactical Gear", -- Outfit display name
                description = "Full tactical response equipment", -- Outfit description
                components = {
                    ["torso"] = { drawableId = 18, textureId = 0, paletteId = 0 },
                    ["undershirt"] = { drawableId = 26, textureId = 0, paletteId = 0 },
                    ["legs"] = { drawableId = 32, textureId = 0, paletteId = 0 },
                    ["shoes"] = { drawableId = 25, textureId = 0, paletteId = 0 },
                    ["accessory"] = { drawableId = 0, textureId = 0, paletteId = 0 },
                    ["kevlar"] = { drawableId = 12, textureId = 0, paletteId = 0 }
                }
            }
        }
    }
}
```

***

#### Active Clothing Station

```
Config.ClothingStation = Config.ClothingStations[1] -- Sets the primary/active clothing station (leave as i
```

### Custody Toilet Configuration

#### Flushable Items

```
-- Custody toilets
Config.FlushableItems = {
    'phone',              # Item that can be flushed down the toilet
    'lockpick',           # Standard lockpick item
    'advancedlockpick',   # Advanced lockpick item
    # Add small items such as drugs or contraband to keep it realistic
}
```

***

### Cell Toilet Locations

```
Config.CellToilets = {
    {
        cellNumber = 1, # Cell identifier number
        flushButton = vector3(470.77, -995.01, 24.99), # Location of the flush interaction button
        toilet = vector3(470.87, -994.8, 24.0), # Physical toilet stash location
        stashId = "cell_1_toilet" # Unique stash ID for this toilet
    },
    {
        cellNumber = 2,
        flushButton = vector3(475.06, -995.01, 24.98),
        toilet = vector3(475.07, -994.8, 24.05),
        stashId = "cell_2_toilet"
    },
    {
        cellNumber = 3,
        flushButton = vector3(479.36, -995.01, 24.99),
        toilet = vector3(479.36, -994.75, 24.0),
        stashId = "cell_3_toilet"
    },
    {
        cellNumber = 4,
        flushButton = vector3(482.5, -1004.99, 24.99),
        toilet = vector3(482.46, -1005.21, 24.01),
        stashId = "cell_4_toilet"
    },
    {
        cellNumber = 5,
        flushButton = vector3(478.22, -1005.0, 24.98),
        toilet = vector3(478.13, -1005.22, 24.0),
        stashId = "cell_5_toilet"
    },
    {
        cellNumber = 6,
        flushButton = vector3(473.91, -1004.99, 24.98),
        toilet = vector3(473.85, -1005.22, 24.0),
        stashId = "cell_6_toilet"
    }
}
```

***

### Toilet Stash Settings

```
Config.ToiletStash = {
    maxWeight = 50000, # Maximum stash weight (50kg in grams)
    maxSlots = 3       # Maximum number of item slots available
}
```

***

### Toilet Flush Sound

```
Config.ToiletFlushSound = {
    enabled = true, # Enable or disable flush sound effect
    range = 10.0,   # Distance (in meters) players can hear the flush
    volume = 0.5    # Sound volume (0.0 - 1.0)
}
```

### Support

For help with installation, configuration, bugs, or feature requests: Join the **LGMods Discord** server and open a support ticket.

Made with ♥ by LGMods


# British Server Sided Sirens

## Product Information

Purchase -  [Tebex Store - British Server Sided Sirens](https://store.lgmods.co.uk/package/5971004)

This product adds over 20 British siren tones to your FiveM server, making them available to use with popular ELS scripts. The sirens themselves are 'drag and drop' to install and only require your ELS script to be modified to load the tones you decide to use.

The installation instructions on this page will be showing how to install the sirens for oELS by OM Solutions, which we highly recommend. Installation to other ELS scripts should be similar in concept.

{% embed url="<https://omsolutions.co.uk/product/emergency-lighting-system/>" fullWidth="false" %}

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

{% hint style="info" %}
Trying to install London Server Sided Sirens instead? [Visit this page](https://docs.lgmods.co.uk/)
{% endhint %}

## Contents

<table data-full-width="false"><thead><tr><th width="226">File/[Folder]</th><th width="289">Information</th><th>Required to be configured?</th><th data-hidden></th></tr></thead><tbody><tr><td>[data]</td><td>File required to manage how certain parts of the addon works. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>[dlc_lgmods]</td><td>This folder includes all the sound files. Do not alter the file names or structure.</td><td>No - Do not edit</td><td></td></tr><tr><td>.fxap</td><td>A FiveM file required to be included within the resource folder for the modification to load</td><td>No - Do not edit</td><td></td></tr><tr><td>fxmanifest.lua</td><td>FiveM config file to determine what files need to be loaded/streamed. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>README.txt</td><td>A file that does a poorer job at explaining what to do compared to this page! It has no functionality</td><td>No - Do not edit</td><td></td></tr></tbody></table>

{% hint style="danger" %}
Do not edit the files within this resource folder unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.

Configuration must be made in your ELS script to enable these to work on vehicles.
{% endhint %}

## Installation

{% hint style="info" %}
These instructions assume you have a working FiveM server that you can already connect to without issue. Please see [here](https://docs.fivem.net/docs/server-manual/setting-up-a-server/) for more information on setting up a FiveM server.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation. It should be in the same location as your server.cfg.&#x20;
2. Download the LG Mods product from your [FiveM Keymaster](https://keymaster.fivem.net/), if you haven't already.
3. Extract the files from the ZIP archive you downloaded into the 'Resources' folder.
4. The folder inside the 'Resources' folder should be 'LGMods\_Sirens' and within it you see the files listed above.&#x20;

{% hint style="info" %}
If you find another folder inside the LGMods\_Sirens folder, then you need to make sure the contents are moved so that the files above are within the first directory you open from the resources folder, otherwise the addon will not load
{% endhint %}

5. Open your server.cfg and find where you see a number of lines that start with the word 'ensure'.  The default resources are usually included and appear like below.&#x20;

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
```

6. Below these lines is where you will add this resource with the following line

```
ensure LGMods_Sirens
```

7. Restart your server. Some resources can be loaded while the server is running using the start command, however sound files can usually have problems using this method as such we recommend you restart your server after installation.

{% hint style="info" %}
All players that join must 'stream' the asset to their computer for the first time they connect to the server. There may be a short delay when first joining a server for any siren sounds to work, before they are cached. Depending on the server and clients internet connection, there maybe a small period where the sirens don't start immediately. Please be patient and try again after one minute
{% endhint %}

## Configuration

The configuration of this product is done within your ELS script. The below instructions are based upon [oELS by OM Solutions](https://omsolutions.co.uk/product/emergency-lighting-system/), which we highly recommend.

The files we will be looking to modify in the oELS directory are;

* Config.lua
* \_Default.json (or an existing .json file you have made to configure oELS for your vehicle already)

### Configuring oELS

1. Open **Config.lua** in a text editor (Windows Notepad is fine, but Notepad++ is a free alternative that makes reading Lua and JSON files easier)
2. Scroll down to the line that has 'Config.Soundpacks = {'&#x20;
3. Replace this section with the following code;

```lua
Config.Soundpacks = {
     "DLC_LGMODS\\sirenpack_one",
     "DLC_LGMODS\\sirenpack_two",
     "DLC_LGMODS\\sirenpack_three"
}
```

{% hint style="warning" %}
You may include other sound packs in this section if you have them installed from other siren packs. You must ensure that the formatting of the JSON array remains valid (check for the quotes and a comma at the end of all but the last line). Be aware of the double backslashes \\\ too.
{% endhint %}

4. Save Config.lua and close it
5. Open your .json file which is in the ELS folder of the ELS resource. If you haven't made one yet, edit \_Default.json&#x20;
6. Within this file scroll to the bottom of the file looking for where it mentions "sirens". It should by default look like this;

```lua
 "sirens": {
        "enabled": true,
        "bullHorn": {
            "enabled": true,
            "soundFile": "SIRENS_AIRHORN",
            "soundPack": 0
        },
        "sounds": [
            {
                "soundFile": "RESIDENT_VEHICLES_SIREN_WAIL_01",
                "soundPack": 0
            },
            {
                "soundFile": "VEHICLES_HORNS_SIREN_2",
                "soundPack": 0
            },
            {
                "soundFile": "VEHICLES_HORNS_SIREN_1",
                "soundPack": 0
            }
        ]
    },
```

7. The lines that require editing are where it mentions "soundFile" and "soundPack" in four different places. A soundFile will be within one of the three soundPack files. To use a siren tone you must put the soundFile from the table below for the siren you want. You must also make sure you are using the relevant soundPack shown next to it in the table below.
8. Once you have finished, save the file. The filename MUST be the same name you have given the vehicle files and in the vehicle.meta. For example a car named POLVAN1 would be saved as POLVAN1.json.
9. Restart your FiveM server.&#x20;

{% hint style="info" %}
You will need to repeat this for every vehicle you wish to assign the LGMods Siren Pack sirens to.

If you have any issues be sure to check the F8 console raising any errors, otherwise check for typing errors.
{% endhint %}

### Siren Pack List

#### RSG MCS 32 Siren (Police Post 2012 Fleet)

<table><thead><tr><th width="213">soundFile</th><th width="323">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>SIREN_ALPHA</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Wail</td></tr><tr><td>SIREN_BRAVO</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Yelp</td></tr><tr><td>SIREN_CHARLIE</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Phaser</td></tr><tr><td>SIREN_DELTA</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Bullhorn</td></tr></tbody></table>

***

#### Whelen Alpha (Police Pre 2012 Fleet)

<table><thead><tr><th width="213">soundFile</th><th width="322">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>SIREN_ECHO</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Wail</td></tr><tr><td>SIREN_FOXTROT</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Yelp</td></tr><tr><td>SIREN_GOLF</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Two-Tone</td></tr><tr><td>SIREN_HOTEL</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Bullhorn</td></tr></tbody></table>

***

#### Premier Hazard 7004 (Police Carriers)

<table><thead><tr><th width="212">soundFile</th><th width="321">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>SIREN_LIMA</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Wail</td></tr><tr><td>SIREN_MIKE</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Yelp</td></tr><tr><td>SIREN_NOVEMBER</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Phaser</td></tr><tr><td>SIREN_HOTEL</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Bullhorn</td></tr></tbody></table>

***

#### Whelen Alpha 12R (Fire Appliances)

<table><thead><tr><th width="212">soundFile</th><th width="320">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>SIREN_INDIA</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Wail</td></tr><tr><td>SIREN_JULIETT</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Yelp</td></tr><tr><td>SIREN_KILO</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Phaser</td></tr><tr><td>SIREN_HOTEL</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Bullhorn</td></tr></tbody></table>

***

#### Whelen Euro 1 (Ambulance)

<table><thead><tr><th width="210">soundFile</th><th width="322">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>SIREN_QUEBEC</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Wail</td></tr><tr><td>SIREN_ROMEO</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Yelp</td></tr><tr><td>SIREN_TANGO</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Bullhorn</td></tr></tbody></table>

***

#### Whelen Alpha (Ambulance RRV Tones)

<table><thead><tr><th width="209">soundFile</th><th width="326">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>SIREN_UNIFORM</td><td>SIRENPACK_THREE_SOUNDSET</td><td></td></tr><tr><td>SIREN_VICTOR</td><td>SIRENPACK_THREE_SOUNDSET</td><td></td></tr><tr><td>SIREN_WHISKEY</td><td>SIRENPACK_THREE_SOUNDSET</td><td></td></tr><tr><td>SIREN_XRAY</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Bullhorn</td></tr></tbody></table>

### Example

Let's give an example of the block of code relating to the sirens. Here I have changed the bullhorn file to SIREN\_DELTA which is part of the SIRENPACK\_ONE\_SOUNDSET. I then use SIREN\_ALPHA and SIREN\_BRAVO for the sirens also part of SIRENPACK\_ONE\_SOUNDSET. However, I have decided to use a different third siren and instead going with SIREN\_NOVEMBER of the SIRENPACK\_TWO\_SOUNDSET.

```lua
"sirens": {
        "enabled": true,
        "bullHorn": {
            "enabled": true,
            "soundFile": "SIREN_DELTA",
            "soundPack": "SIRENPACK_ONE_SOUNDSET"
        },
        "sounds": [
            {
                "soundFile": "SIREN_ALPHA",
                "soundPack": "SIRENPACK_ONE_SOUNDSET"
            },
            {
                "soundFile": "SIREN_BRAVO",
                "soundPack": "SIRENPACK_ONE_SOUNDSET"
            },
            {
                "soundFile": "SIREN_NOVEMBER",
                "soundPack": "SIRENPACK_TWO_SOUNDSET"
            }
        ]
    },
```

{% hint style="info" %}
You can add more sirens by repeating the blocks, making sure to put a comma after the } for all but the last siren.
{% endhint %}


# London Server Sided Sirens

## Product Information

Purchase -  [Tebex Store - London Server Sided Sirens](https://store.lgmods.co.uk/package/5997240)

This product adds over 25 London based siren tones to your FiveM server, making them available to use with popular ELS scripts. The sirens themselves are 'drag and drop' to install and only require your ELS script to be modified to load the tones you decide to use.

The installation instructions on this page will be showing how to install the sirens for oELS by OM Solutions, which we highly recommend. Installation to other ELS scripts should be similar in concept.

{% embed url="<https://omsolutions.co.uk/product/emergency-lighting-system/>" fullWidth="false" %}

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

{% hint style="info" %}
Trying to install British Server Sided Sirens instead? [Visit this page](/misc/british-sirens)
{% endhint %}

## Contents

<table data-full-width="false"><thead><tr><th width="249">File/[Folder]</th><th width="289">Information</th><th>Required to be configured?</th><th data-hidden></th></tr></thead><tbody><tr><td>[data]</td><td>File required to manage how certain parts of the addon works. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>[dlc_lgmods_londonsirens]</td><td>This folder includes all the sound files. Do not alter the file names or structure.</td><td>No - Do not edit</td><td></td></tr><tr><td>.fxap</td><td>A FiveM file required to be included within the resource folder for the modification to load</td><td>No - Do not edit</td><td></td></tr><tr><td>fxmanifest.lua</td><td>FiveM config file to determine what files need to be loaded/streamed. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>README.txt</td><td>A file that does a poorer job at explaining what to do compared to this page! It has no functionality</td><td>No - Do not edit</td><td></td></tr></tbody></table>

{% hint style="danger" %}
Do not edit the files within this resource folder unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.

Configuration must be made in your ELS script to enable these to work on vehicles.
{% endhint %}

## Installation

{% hint style="info" %}
These instructions assume you have a working FiveM server that you can already connect to without issue. Please see [here](https://docs.fivem.net/docs/server-manual/setting-up-a-server/) for more information on setting up a FiveM server.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation. It should be in the same location as your server.cfg.&#x20;
2. Download this LG Mods product from your [FiveM Keymaster](https://keymaster.fivem.net/), if you haven't already.
3. Extract the files from the ZIP archive you downloaded into the 'Resources' folder.
4. The folder inside the 'Resources' folder should be 'LGMods\_LondonSirens' and within it you see the files listed above.&#x20;

{% hint style="info" %}
If you find another folder inside the LGMods\_LondonSirens folder, then you need to make sure the contents are moved so that the files above are within the first directory you open from the resources folder, otherwise the addon will not load
{% endhint %}

5. Open your server.cfg and find where you see a number of lines that start with the word 'ensure'.  The default resources are usually included and appear like below.&#x20;

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
```

6. Below these lines is where you will add this resource with the following line

```
ensure LGMods_LondonSirens
```

7. Restart your server. Some resources can be loaded while the server is running using the start command, however sound files can usually have problems using this method as such we recommend you restart your server after installation.

{% hint style="info" %}
All players that join must 'stream' the asset to their computer for the first time they connect to the server. There may be a short delay when first joining a server for any siren sounds to work, before they are cached. Depending on the server and clients internet connection, there maybe a small period where the sirens don't start immediately. Please be patient and try again after one minute
{% endhint %}

## Configuration

The configuration of this product is done within your ELS script. The below instructions are based upon [oELS by OM Solutions](https://omsolutions.co.uk/product/emergency-lighting-system/), which we highly recommend.

The files we will be looking to modify in the oELS directory are;

* Config.lua
* \_Default.json (or an existing .json file you have made to configure oELS for your vehicle already)

### Configuring oELS

1. Open **Config.lua** in a text editor (Windows Notepad is fine, but Notepad++ is a free alternative that makes reading Lua and JSON files easier)
2. Scroll down to the line that has 'Config.Soundpacks = {'&#x20;
3. Replace this section with the following code;

```lua
Config.Soundpacks = {
     "DLC_LGMODS_LONDONSIRENS\\sirenpack_one",
     "DLC_LGMODS_LONDONSIRENS\\sirenpack_two",
     "DLC_LGMODS_LONDONSIRENS\\sirenpack_three"
}
```

{% hint style="warning" %}
You may include other sound packs in this section if you have them installed from other siren packs. You must ensure that the formatting of the JSON array remains valid (check for the quotes and a comma at the end of all but the last line). Be aware of the double backslashes \\\ too.
{% endhint %}

4. Save Config.lua and close it
5. Open your .json file which is in the ELS folder of the ELS resource. If you haven't made one yet, edit \_Default.json&#x20;
6. Within this file scroll to the bottom of the file looking for where it mentions "sirens". It should by default look like this;

```lua
 "sirens": {
        "enabled": true,
        "bullHorn": {
            "enabled": true,
            "soundFile": "SIRENS_AIRHORN",
            "soundPack": 0
        },
        "sounds": [
            {
                "soundFile": "RESIDENT_VEHICLES_SIREN_WAIL_01",
                "soundPack": 0
            },
            {
                "soundFile": "VEHICLES_HORNS_SIREN_2",
                "soundPack": 0
            },
            {
                "soundFile": "VEHICLES_HORNS_SIREN_1",
                "soundPack": 0
            }
        ]
    },
```

7. The lines that require editing are where it mentions "soundFile" and "soundPack" in four different places. A soundFile will be within one of the three soundPack files. To use a siren tone you must put the soundFile from the table below for the siren you want. You must also make sure you are using the relevant soundPack shown next to it in the table below.
8. Once you have finished, save the file. The filename MUST be the same name you have given the vehicle files and in the vehicle.meta. For example a car named POLVAN1 would be saved as POLVAN1.json.
9. Restart your FiveM server.&#x20;

{% hint style="info" %}
You will need to repeat this for every vehicle you wish to assign the LGMods Siren Pack sirens to.

If you have any issues be sure to check the F8 console raising any errors, otherwise check for typing errors.
{% endhint %}

### Siren Pack List

#### RSG MCS32

<table><thead><tr><th width="213">soundFile</th><th width="323">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>rsg_wail</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG Wail</td></tr><tr><td>rsg_yelp</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG Yelp</td></tr><tr><td>rsg_twotone</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG Two Tone</td></tr><tr><td>rsg_phaser</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG Phaser</td></tr></tbody></table>

***

#### RSG CVS

<table><thead><tr><th width="213">soundFile</th><th width="322">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>cvs_wail</td><td>SIRENPACK_ONE_SOUNDSET</td><td>CVS Wail</td></tr><tr><td>cvs_yelp</td><td>SIRENPACK_ONE_SOUNDSET</td><td>CVS Yelp</td></tr><tr><td>cvs_twotone</td><td>SIRENPACK_ONE_SOUNDSET</td><td>CVS Two-Tone</td></tr><tr><td>cvs_phaser</td><td>SIRENPACK_ONE_SOUNDSET</td><td>CVS Bullhorn</td></tr></tbody></table>

***

#### Bullhorns

<table><thead><tr><th width="215">soundFile</th><th width="322">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>bullhorn_one</td><td>SIRENPACK_ONE_SOUNDSET</td><td></td></tr><tr><td>bullhorn_two</td><td>SIRENPACK_ONE_SOUNDSET</td><td></td></tr><tr><td>bullhorn_three</td><td>SIRENPACK_ONE_SOUNDSET</td><td></td></tr></tbody></table>

#### Stirling Siren

<table><thead><tr><th width="212">soundFile</th><th width="321">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>stirling_wail</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Stirling Wail</td></tr><tr><td>stirling_yelp</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Stirling Yelp</td></tr><tr><td>stirling_phaser</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Stirling Phaser</td></tr><tr><td>stirling_twotone</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Stirling Two Tone</td></tr></tbody></table>

***

#### HANSCH TYPE 620 (Motorcycle Siren)

<table><thead><tr><th width="188">soundFile</th><th width="310">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>bike_wail</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Hansch 620 Wail</td></tr><tr><td>bike_yelp</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Hansch 620 Yelp</td></tr><tr><td>bike_whistle</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Whistle (use as bullhorn)</td></tr></tbody></table>

***

#### Whelen Gamma

<table><thead><tr><th width="210">soundFile</th><th width="322">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>las_wail</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Whelen Gamma Wail</td></tr><tr><td>las_yelp</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Whelen Gamma Yelp</td></tr><tr><td>las_phaser</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Whelen Gamma Phaser</td></tr></tbody></table>

***

#### Whelen Beta

<table><thead><tr><th width="209">soundFile</th><th width="326">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>lasold_wail</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Whelen Beta Wail</td></tr><tr><td>lasold_yelp</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Whelen Beta Yelp</td></tr><tr><td>lasold_twotone</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Whelen Beta Two Tone</td></tr><tr><td>lasold_phaser</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Whelen Beta Phaser</td></tr></tbody></table>

***

#### Whelen Euro 1

<table><thead><tr><th width="210">soundFile</th><th width="330">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>lfb_wail</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Whelen Euro 1 Wail</td></tr><tr><td>lfb_yelp</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Whelen Euro 1 Yelp</td></tr><tr><td>lfb_phaser</td><td>SIRENPACK_THREE_SOUNDSET</td><td>Whelen Euro 1 Phaser</td></tr></tbody></table>

***

#### Bullhorns

<table><thead><tr><th width="217">soundFile</th><th width="324">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>las_bullhorn</td><td>SIRENPACK_THREE_SOUNDSET</td><td></td></tr><tr><td>lfb_bullhorn</td><td>SIRENPACK_THREE_SOUNDSET</td><td></td></tr></tbody></table>

### Example

Let's give an example of the block of code relating to the sirens. Here I have changed the bullhorn file to bullhorn\_one which is part of the SIRENPACK\_ONE\_SOUNDSET. I then use rsg\_wail and rsg\_yelp for the sirens also part of SIRENPACK\_ONE\_SOUNDSET. However, I have decided to use a different third siren and instead going with stirling\_twotone of the SIRENPACK\_TWO\_SOUNDSET.

```lua
"sirens": {
        "enabled": true,
        "bullHorn": {
            "enabled": true,
            "soundFile": "bullhorn_one",
            "soundPack": "SIRENPACK_ONE_SOUNDSET"
        },
        "sounds": [
            {
                "soundFile": "rsg_wail",
                "soundPack": "SIRENPACK_ONE_SOUNDSET"
            },
            {
                "soundFile": "rsg_yelp",
                "soundPack": "SIRENPACK_ONE_SOUNDSET"
            },
            {
                "soundFile": "stirling_twotone",
                "soundPack": "SIRENPACK_TWO_SOUNDSET"
            }
        ]
    },
```

{% hint style="info" %}
You can add more sirens by repeating the blocks, making sure to put a comma after the } for all but the last siren.
{% endhint %}


# Mega Server Sided Sirens

## Product Information

Purchase -  [Tebex Store - Mega Server Sided Sirens](https://store.lgmods.co.uk/package/6749762)

This product adds over 30 British based siren tones to your FiveM server from all across the UK, making them available to use with popular ELS scripts. The sirens themselves are 'drag and drop' to install and only require your ELS script to be modified to load the tones you decide to use.

The installation instructions on this page will be showing how to install the sirens for oELS by OM Solutions, which we highly recommend. Installation to other ELS scripts should be similar in concept.

{% embed url="<https://omsolutions.co.uk/product/emergency-lighting-system/>" fullWidth="false" %}

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

## Contents

<table data-full-width="false"><thead><tr><th width="249">File/[Folder]</th><th width="289">Information</th><th>Required to be configured?</th><th data-hidden></th></tr></thead><tbody><tr><td>[data]</td><td>File required to manage how certain parts of the addon works. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>[dlc_lgmods_mega_sirens]</td><td>This folder includes all the sound files. Do not alter the file names or structure.</td><td>No - Do not edit</td><td></td></tr><tr><td>.fxap</td><td>A FiveM file required to be included within the resource folder for the modification to load</td><td>No - Do not edit</td><td></td></tr><tr><td>fxmanifest.lua</td><td>FiveM config file to determine what files need to be loaded/streamed. Do not edit</td><td>No - Do not edit</td><td></td></tr><tr><td>README.txt</td><td>A file that does a poorer job at explaining what to do compared to this page! It has no functionality</td><td>No - Do not edit</td><td></td></tr></tbody></table>

{% hint style="danger" %}
Do not edit the files within this resource folder unless you know what you are doing. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.

Configuration must be made in your ELS script to enable these to work on vehicles.
{% endhint %}

## Installation

{% hint style="info" %}
These instructions assume you have a working FiveM server that you can already connect to without issue. Please see [here](https://docs.fivem.net/docs/server-manual/setting-up-a-server/) for more information on setting up a FiveM server.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation. It should be in the same location as your server.cfg.&#x20;
2. Download this LG Mods product from your [FiveM Keymaster](https://keymaster.fivem.net/), if you haven't already.
3. Extract the files from the ZIP archive you downloaded into the 'Resources' folder.
4. The folder inside the 'Resources' folder should be 'LGMods\_MegaSirenPack' and within it you see the files listed above.&#x20;

{% hint style="info" %}
If you find another folder inside the LGMods\_MegaSirenPack folder, then you need to make sure the contents are moved so that the files above are within the first directory you open from the resources folder, otherwise the addon will not load
{% endhint %}

5. Open your server.cfg and find where you see a number of lines that start with the word 'ensure'.  The default resources are usually included and appear like below.&#x20;

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
```

6. Below these lines is where you will add this resource with the following line

```
ensure LGMods_MegaSirenPack
```

7. Restart your server. Some resources can be loaded while the server is running using the start command, however sound files can usually have problems using this method as such we recommend you restart your server after installation.

{% hint style="info" %}
All players that join must 'stream' the asset to their computer for the first time they connect to the server. There may be a short delay when first joining a server for any siren sounds to work, before they are cached. Depending on the server and clients internet connection, there maybe a small period where the sirens don't start immediately. Please be patient and try again after one minute
{% endhint %}

## Configuration

The configuration of this product is done within your ELS script. The below instructions are based upon [oELS by OM Solutions](https://omsolutions.co.uk/product/emergency-lighting-system/), which we highly recommend.

The files we will be looking to modify in the oELS directory are;

* Config.lua
* \_Default.json (or an existing .json file you have made to configure oELS for your vehicle already)

### Configuring oELS

1. Open **Config.lua** in a text editor (Windows Notepad is fine, but Notepad++ is a free alternative that makes reading Lua and JSON files easier)
2. Scroll down to the line that has 'Config.Soundpacks = {'&#x20;
3. Replace this section with the following code;

```lua
Config.Soundpacks = {
     "DLC_LGMODS_MEGA_SIRENS\\sirenpack_one",
     "DLC_LGMODS_MEGA_SIRENS\\sirenpack_two"
}
```

{% hint style="warning" %}
You may include other sound packs in this section if you have them installed from other siren packs. You must ensure that the formatting of the JSON array remains valid (check for the quotes and a comma at the end of all but the last line). Be aware of the double backslashes \\\ too.
{% endhint %}

4. Save Config.lua and close it
5. Open your .json file which is in the ELS folder of the ELS resource. If you haven't made one yet, edit \_Default.json&#x20;
6. Within this file scroll to the bottom of the file looking for where it mentions "sirens". It should by default look like this;

```lua
 "sirens": {
        "enabled": true,
        "bullHorn": {
            "enabled": true,
            "soundFile": "SIRENS_AIRHORN",
            "soundPack": 0
        },
        "sounds": [
            {
                "soundFile": "RESIDENT_VEHICLES_SIREN_WAIL_01",
                "soundPack": 0
            },
            {
                "soundFile": "VEHICLES_HORNS_SIREN_2",
                "soundPack": 0
            },
            {
                "soundFile": "VEHICLES_HORNS_SIREN_1",
                "soundPack": 0
            }
        ]
    },
```

7. The lines that require editing are where it mentions "soundFile" and "soundPack" in four different places. A soundFile will be within one of the three soundPack files. To use a siren tone you must put the soundFile from the table below for the siren you want. You must also make sure you are using the relevant soundPack shown next to it in the table below.
8. Once you have finished, save the file. The filename MUST be the same name you have given the vehicle files and in the vehicle.meta. For example a car named POLVAN1 would be saved as POLVAN1.json.
9. Restart your FiveM server.&#x20;

{% hint style="info" %}
You will need to repeat this for every vehicle you wish to assign the LGMods Siren Pack sirens to.

If you have any issues be sure to check the F8 console raising any errors, otherwise check for typing errors.
{% endhint %}

### Siren Tones & their Sound Packs

{% hint style="info" %}
Sirens can be mixed and matched so you could do a Stirling Wail but use a Beta Bullhorn!
{% endhint %}

#### RSG MCS32

<table><thead><tr><th width="213">soundFile</th><th width="323">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>mcs_wail</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG MCS32 Wail</td></tr><tr><td>mcs_yelp</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG MCS32 Yelp</td></tr><tr><td>mcs_twotone</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG MCS32 Two Tone</td></tr><tr><td>mcs_phaser</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG MCS32 Phaser</td></tr></tbody></table>

***

#### RSG CVS

<table><thead><tr><th width="213">soundFile</th><th width="322">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>cvs_wail</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG CVS Wail</td></tr><tr><td>cvs_yelp</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG CVS Yelp</td></tr><tr><td>cvs_twotone</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG CVS Two-Tone</td></tr><tr><td>cvs_phaser</td><td>SIRENPACK_ONE_SOUNDSET</td><td>RSG CVS Phaser</td></tr></tbody></table>

***

#### Bullhorns

<table><thead><tr><th width="215">soundFile</th><th width="322">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>mcs_bullhorn</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Use for MCS &#x26; CVS</td></tr><tr><td>beta_bullhorn</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Beta Bullhorn</td></tr><tr><td>euro_bullhorn</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Euro Bullhorn</td></tr><tr><td>gamma2_bullhorn</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Gamma2 Bullhorn</td></tr></tbody></table>

#### Stirling Siren

<table><thead><tr><th width="212">soundFile</th><th width="321">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>stirling_wail</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Stirling Wail</td></tr><tr><td>stirling_yelp</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Stirling Yelp</td></tr><tr><td>stirling_phaser</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Stirling Phaser</td></tr><tr><td>stirling_twotone</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Stirling Two Tone</td></tr></tbody></table>

***

#### HANSCH TYPE 620 (Motorcycle Siren)

<table><thead><tr><th width="188">soundFile</th><th width="310">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>hansch_wail</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Hansch 620 Wail</td></tr><tr><td>hansch_yelp</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Hansch 620 Yelp</td></tr><tr><td>hansch_whistle</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Whistle (use as bullhorn)</td></tr></tbody></table>

***

#### Whelen Gamma2

<table><thead><tr><th width="210">soundFile</th><th width="322">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>gamma2_wail</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Whelen Gamma2 Wail</td></tr><tr><td>gamma2_yelp</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Whelen Gamma2 Yelp</td></tr><tr><td>gamma2_phaser</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Whelen Gamma2 Phaser</td></tr><tr><td>gamma2_twotone</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Whelen Gamma2 TwoTone</td></tr></tbody></table>

***

#### Whelen Beta

<table><thead><tr><th width="209">soundFile</th><th width="326">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>beta_wail</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Whelen Beta Wail</td></tr><tr><td>beta_yelp</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Whelen Beta Yelp</td></tr><tr><td>beta_phaser</td><td>SIRENPACK_ONE_SOUNDSET</td><td>Whelen Beta Phaser</td></tr></tbody></table>

***

#### Whelen Euro

<table><thead><tr><th width="210">soundFile</th><th width="330">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>euro_wail</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Whelen Euro Wail</td></tr><tr><td>euro_yelp</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Whelen Euro Yelp</td></tr><tr><td>euro_phaser</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Whelen Euro Phaser</td></tr></tbody></table>

***

#### Whelen Alpha 12r

<table><thead><tr><th width="217">soundFile</th><th width="324">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>alpha12r_wail</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Whelen Alpha 12r Wail</td></tr><tr><td>alpha12r_yelp</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Whelen Alpha 12r Yelp</td></tr><tr><td>alpha12r_phaser</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Whelen Alpha 12r Phaser</td></tr></tbody></table>

***

#### Premier Hazard 7004

<table><thead><tr><th>soundFile</th><th width="267">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>7004_wail</td><td>SIRENPACK_TWO_SOUNDSET</td><td>7004 Wail</td></tr><tr><td>7004_yelp</td><td>SIRENPACK_TWO_SOUNDSET</td><td>7004 Yelp</td></tr><tr><td>7004_phaser</td><td>SIRENPACK_TWO_SOUNDSET</td><td>7004 Phaser</td></tr></tbody></table>

***

#### Fire Two Tone (Old Hi-LO)

<table><thead><tr><th>soundFile</th><th width="267">soundPack</th><th>Description</th></tr></thead><tbody><tr><td>fire_twotone</td><td>SIRENPACK_TWO_SOUNDSET</td><td>Fire Two Tone</td></tr></tbody></table>

***

### Example

Let's give an example of the block of code relating to the sirens. Here I have changed the bullhorn file to bullhorn\_one which is part of the SIRENPACK\_ONE\_SOUNDSET. I then use rsg\_wail and rsg\_yelp for the sirens also part of SIRENPACK\_ONE\_SOUNDSET. However, I have decided to use a different third siren and instead going with stirling\_twotone of the SIRENPACK\_TWO\_SOUNDSET.

```lua
"sirens": {
        "enabled": true,
        "bullHorn": {
            "enabled": true,
            "soundFile": "mcs_bullhorn",
            "soundPack": "SIRENPACK_ONE_SOUNDSET"
        },
        "sounds": [
            {
                "soundFile": "mcs_wail",
                "soundPack": "SIRENPACK_ONE_SOUNDSET"
            },
            {
                "soundFile": "mcs_yelp",
                "soundPack": "SIRENPACK_ONE_SOUNDSET"
            },
            {
                "soundFile": "mcs_twotone",
                "soundPack": "SIRENPACK_TWO_SOUNDSET"
            },
            {
                "soundFile": "mcs_phaser",
                "soundPack": "SIRENPACK_TWO_SOUNDSET"
            }
        ]
    },
```

{% hint style="info" %}
You can add more sirens by repeating the blocks, making sure to put a comma after the } for all but the last siren.
{% endhint %}


# Police Prop Pack

## Product Information

Purchase -  [Tebex Store - British Police Prop Pack](https://store.lgmods.co.uk/package/5773052)

The British Police Prop Pack brings 17 British Police related props to your FiveM server. You can use the included prop spawn menu to place these props. The menu can be job locked/whitelisted to ESX, QBCore or just be standalone.

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

## Contents

<table data-full-width="false"><thead><tr><th width="226">File/[Folder]</th><th width="289">Information</th><th>Required to be configured?</th><th data-hidden></th></tr></thead><tbody><tr><td>[stream]</td><td>Contains the prop models and textures.</td><td>No - Do not edit</td><td></td></tr><tr><td>.fxap</td><td>A FiveM file required to be included within the resource folder for the modification to load</td><td>No - Do not edit</td><td></td></tr><tr><td>config.lua</td><td>Configuration file for the Prop Pack.</td><td>Requires configuration if using whitelisting - see <a href="#configuration">configuration</a></td><td></td></tr><tr><td>fxmanifest.lua</td><td>FiveM config file to determine what files need to be loaded/streamed. Do not edit</td><td>No - Edit only to disable the prop menu script</td><td></td></tr><tr><td>menu.lua</td><td>Script for the NativeUI menu.</td><td>No - Do not edit</td><td></td></tr><tr><td>NativeUI.lua</td><td>NativeUI framework that is used by the prop spawning menu</td><td>No - Do not edit</td><td></td></tr></tbody></table>

{% hint style="danger" %}
Do not edit the files within this resource folder outside of what is highlighted above as being configurable. LGMods will not provide assistance to you if you have edited files outside of what has been set out to be edited by the customer.
{% endhint %}

## Installation

{% hint style="info" %}
These instructions assume you have a working FiveM server that you can already connect to without issue. Please see [here](https://docs.fivem.net/docs/server-manual/setting-up-a-server/) for more information on setting up a FiveM server.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation. It should be in the same location as your server.cfg.&#x20;
2. Download the LG Mods product from your [FiveM Keymaster](https://keymaster.fivem.net/), if you haven't already.
3. Extract the files from the ZIP archive you downloaded into the 'Resources' folder.
4. The folder inside the 'Resources' folder should be 'LGMods\_PoliceProps' and within it you see the files listed above.&#x20;

{% hint style="info" %}
If you find another folder inside the LGMods\_PoliceProps folder, then you need to make sure the contents are moved so that the files above are within the first directory you open from the resources folder, otherwise the addon will not load
{% endhint %}

5. Open your server.cfg and find where you see a number of lines that start with the word 'ensure'.  The default resources are usually included and appear like below.&#x20;

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
```

6. Below these lines is where you will add this resource with the following line

```
ensure LGMods_PoliceProps
```

7. Restart your server. Some resources can be loaded while the server is running using the start command, however prop files can usually have problems using this method as such we recommend you restart your server after installation.

{% hint style="info" %}
All players that join must 'stream' the asset to their computer for the first time they connect to the server. There may be a very short delay in the objects appearing for the first time for each user. The objects will cache and will appear instantly after the first time.
{% endhint %}

## Configuration

The configuration of this product is done within the config.lua file, found in the LGMods\_PoliceProps resource folder.

### Configuring the Prop Pack Menu

Open **Config.lua** in a text editor (Windows Notepad is fine, but Notepad++ is a free alternative that makes reading Lua and JSON files easier). There are a number of options to modify.

The first line sets the key to be used to open the open the menu. By default it is 166, which is F5. You can change this by selecting a different number corresponding to a different key, as laid out by the information on [this CFx FiveM Controls doc](https://docs.fivem.net/docs/game-references/controls/#controls).

```lua
Config.keybind = 166 -- Keybind for opening the menu
```

Below this is where the props are defined for the menu. They will appear in the menu in the same order they are placed here. If you wish to add further objects you can do so by copying and pasting one of the lines, ensuring all but the last one have a comma at the end. By default, all of the LG Mods Police Props are listed here, so you do not need to edit anything if you are only wishing to feature these in the menu.

```lua
Config.Props = {
  --[[
      EXAMPLE: 
  {name = 'a', spawncode = 'b'},
      ────────────────────────────────────────────────────────────────
      'a' is the title that shows in the menu
      'b' is the spawn code for prop that will be spawned
  ]]
  {name = 'Police Cone', spawncode = 'lgmods_cone'},
  {name = 'Police Slow Sign', spawncode = 'lgmods_policeslow'},
  {name = 'Police Road Closed Sign', spawncode = 'lgmods_policeroadclosed'},
  {name = 'Police Accident Sign', spawncode = 'lgmods_policeaccident'},
  {name = 'Bare Left Arrow', spawncode = 'lgmods_policeleftarrow'},
  {name = 'Bare Right Arrow', spawncode = 'lgmods_policerightarrow'},
  {name = 'Police Drink Drive Checkpoint', spawncode = 'lgmods_policeddc'},
  {name = 'Police Drones in Operation', spawncode = 'lgmods_policedrones'},
  {name = 'Vision Zero Met Police', spawncode = 'lgmods_visionzero'},
  {name = 'Dorman Blue Lantern', spawncode = 'lgmods_lantern'},
  {name = 'Forensic Tent', spawncode = 'lgmods_forensictent'},
  {name = 'Collision Investigation Camera', spawncode = 'lgmods_collision_cam'},
  {name = 'CSI Marker 1', spawncode = 'lgmods_csimarker1'},
  {name = 'CSI Marker 2', spawncode = 'lgmods_csimarker2'},
  {name = 'CSI Marker 3', spawncode = 'lgmods_csimarker3'},
  {name = 'CSI Marker 4', spawncode = 'lgmods_csimarker4'},
  {name = 'CSI Marker 5', spawncode = 'lgmods_csimarker5'}
}
```

The final part of config.lua that you can modify is the whitelisting/job lock to define who can open the menu.

The first line requires you to pick from a list of the options listed in the comment on the same line. If you are not using a framework mentioned (oEssentials, PoliceEssentials, QBCore, ESX) then use standalone.&#x20;

If you do use one of the frameworks, copy that into the value for the Framework. You then need to define what jobs are allowed access to this menu. Each network should define a name for the job/role and this is what you will place here. In this example "Police" and "Job2" roles will be able to open the menu. But, you must ensure you have entered the correct framework in Config.Framework value above or this will be ignored.

```lua
Config.Framework = 'standalone' -- standalone, oEssentials, PoliceEssentials, QBCore or ESX. If you are using ESX please remove "--" from the start of Line 11S in fxmanifest.

Config.AllowedJobs = { -- This is only checked when Framework is set to QBCore or ESX.
    "Police",
    "Job2"
}

```

Once you have completed all of the above, save config.lua and close it.

### Disable Prop Menu

You may have your own script or tool to spawn the LG Mods Police Props and therefore do not require the script included. To prevent this appearing, edit the&#x20;

## Prop Pack Classnames

You can spawn the props using your own methods. The class names are available below.

<table><thead><tr><th width="318">Classname</th><th width="392">Name</th><th data-hidden>Classname</th></tr></thead><tbody><tr><td><code>lgmods_cone</code></td><td>Police Cone</td><td><code>lgmods_cone</code></td></tr><tr><td><code>lgmods_policeslow</code></td><td>Police Slow Sign</td><td><code>lgmods_policeslow</code></td></tr><tr><td><code>lgmods_policeroadclosed</code></td><td>Police Road Closed Sign</td><td><code>lgmods_policeroadclosed</code></td></tr><tr><td><code>lgmods_policeaccident</code></td><td>Police Accident Sign</td><td></td></tr><tr><td><code>lgmods_policeleftarrow</code></td><td>Bare Left Arrow Sign</td><td></td></tr><tr><td><code>lgmods_policerightarrow</code></td><td>Bare Right Arrow Sign</td><td></td></tr><tr><td><code>lgmods_policeddc</code></td><td>Police Drink Drive Checkpoint Sign</td><td></td></tr><tr><td><code>lgmods_policedrones</code></td><td>Police Drones in Operation Sign</td><td></td></tr><tr><td><code>lgmods_visionzero</code></td><td>Vision Zero Met Police Sign</td><td></td></tr><tr><td><code>lgmods_lantern</code></td><td>Dorman Blue Lantern</td><td></td></tr><tr><td><code>lgmods_forensictent</code></td><td>Forensic Tent</td><td></td></tr><tr><td><code>lgmods_collision_cam</code></td><td>Collision Investigation Camera</td><td></td></tr><tr><td><code>lgmods_csimarker1</code></td><td>CSI Marker 1</td><td></td></tr><tr><td><code>lgmods_csimarker2</code></td><td>CSI Marker 2</td><td></td></tr><tr><td><code>lgmods_csimarker3</code></td><td>CSI Marker 3</td><td></td></tr><tr><td><code>lgmods_csimarker4</code></td><td>CSI Marker 4</td><td></td></tr><tr><td><code>lgmods_csimarker5</code></td><td>CSI Marker 5</td><td></td></tr></tbody></table>


# British Ambience Pack

## Product Information

Purchase - [Tebex Store - British Roadside Ambience Pack](https://store.lgmods.co.uk/package/6004450)

The British Ambience Pack transforms the whole map to create a more British atmosphere. A number of default assets are placed with British alternatives. From phone boxes, postboxes, crossing beacons, traffic signs and many more props lining the streets you will also find areas which have had a complete overhaul including crossings with blister paving, zig zag lines and British railings.

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

## Contents

<table data-full-width="false"><thead><tr><th width="226">File/[Folder]</th><th width="289">Information</th><th>Required to be configured?</th><th data-hidden></th></tr></thead><tbody><tr><td>[stream]</td><td>Contains the prop models and textures.</td><td>No - Do not edit</td><td></td></tr><tr><td>.fxap</td><td>A FiveM file required to be included within the resource folder for the modification to load</td><td>No - Do not edit</td><td></td></tr><tr><td>fxmanifest.lua</td><td>FiveM config file to determine what files need to be loaded/streamed. Do not edit</td><td>No - Do not edit</td><td></td></tr></tbody></table>

{% hint style="danger" %}
Do not edit the files within this resource folder. LGMods will not provide assistance to you if you have edited files within this resource.
{% endhint %}

## Installation

{% hint style="info" %}
These instructions assume you have a working FiveM server that you can already connect to without issue. Please see [here](https://docs.fivem.net/docs/server-manual/setting-up-a-server/) for more information on setting up a FiveM server.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation. It should be in the same location as your server.cfg.&#x20;
2. Download the LG Mods product from your [FiveM Keymaster](https://keymaster.fivem.net/), if you haven't already.
3. Extract the files from the ZIP archive you downloaded into the 'Resources' folder.
4. The folder inside the 'Resources' folder should be 'LGMods\_British\_Roadside' and within it you see the files listed above.&#x20;

{% hint style="info" %}
If you find another folder inside the LGMods\_British\_Roadside folder, then you need to make sure the contents are moved so that the files above are within the first directory you open from the resources folder, otherwise the addon will not load
{% endhint %}

5. Open your server.cfg and find where you see a number of lines that start with the word 'ensure'.  The default resources are usually included and appear like below.&#x20;

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
```

6. Below these lines is where you will add this resource with the following line

```
ensure LGMods_British_Roadside
```

7. Restart your server. Some resources can be loaded while the server is running using the start command, however prop files can usually have problems using this method as such we recommend you restart your server after installation.

{% hint style="info" %}
All players that join must 'stream' the asset to their computer for the first time they connect to the server. There may be a very short delay in the objects appearing for the first time for each user. The objects will cache and will appear instantly after the first time.
{% endhint %}

## Configuration

There are no configurable options for this product. Simply install the resource and it is good to go.

## Prop Pack Classnames

You can spawn the props using your own methods. The class names are available below.

<table><thead><tr><th width="318">Classname</th><th width="392">Name</th><th data-hidden>Classname</th></tr></thead><tbody><tr><td><code>TBC</code></td><td>TBC</td><td><code>lgmods_cone</code></td></tr></tbody></table>


# British Traffic Lights

## Product Information

Purchase - [Tebex Store - British Traffic Lights](https://store.lgmods.co.uk/package/5967242)

This product replaces the original GTA traffic lights with those matching those you would find in the United Kingdom. Each traffic light has been replaced with a light that contains the identical features of the original; for example those lights with filter lane lights include those in the replacement pack.

You can choose between Halogen lights or LED lights, depending on your preference.

{% hint style="info" %}
This product includes a version for FiveM as well as the option to include it within GTA5 single player.
{% endhint %}

## Contents

The resource you download is split into two sections. One for FiveM, one for GTA5 Single Player.&#x20;

### FiveM Version

Within this folder, you will find two folders which represent two different types of traffic lights. You need to select **only one folder** to place into your FiveM server's resource folder. Either **LGMods\_TrafficLights\_Halogen** OR **LGMods\_TrafficLights\_LED** - the contents of these folders appear the same in the folder structure.

<table data-full-width="false"><thead><tr><th width="226">File/[Folder]</th><th width="289">Information</th><th>Required to be configured?</th><th data-hidden></th></tr></thead><tbody><tr><td>[stream]</td><td>Contains the prop models and textures.</td><td>No - Do not edit</td><td></td></tr><tr><td>.fxap</td><td>A FiveM file required to be included within the resource folder for the modification to load</td><td>No - Do not edit</td><td></td></tr><tr><td>fxmanifest.lua</td><td>FiveM config file to determine what files need to be loaded/streamed. Do not edit</td><td>No - Do not edit</td><td></td></tr></tbody></table>

### SP Version

Within this folder, you will find two folders which represent two different types of traffic lights. You need to select **only one folder** which will have the files you are intalling into your game. Either **LGMods\_TrafficLights\_Halogen** OR **LGMods\_TrafficLights\_LED -** the contents of which will be identical in the file structure.

| File/\[Folder]         | Information                         |
| ---------------------- | ----------------------------------- |
| prop\_traffic\_01a.yft | To be installed into your GTA files |
| prop\_traffic\_01b.yft | To be installed into your GTA files |
| prop\_traffic\_01d.yft | To be installed into your GTA files |
| prop\_traffic\_03a.yft | To be installed into your GTA files |
| prop\_traffic\_03b.yft | To be installed into your GTA files |

## Installation

* Find the 'resources' folder within your FiveM server installation. It should be in the same location as your server.cfg.&#x20;
* Download the LG Mods product from your [FiveM Keymaster](https://keymaster.fivem.net/), if you haven't already.

From this point it depends if you are installing the FiveM version or the Single Player Version.

### FiveM

{% hint style="info" %}
These instructions assume you have a working FiveM server that you can already connect to without issue. Please see [here](https://docs.fivem.net/docs/server-manual/setting-up-a-server/) for more information on setting up a FiveM server.
{% endhint %}

1. From the downloaded folder, you need to go into the folder named FiveM Version. You then need to decide if you wish to have Halogen or LED traffic lights. Depending on which one you wish to use, put the folder with the relevant name into your into your servers 'Resources' folder.

{% hint style="info" %}
For example, if you are selecting to use the Halogen lights on your server, place LGMods\_TrafficLights\_Halogen into your FiveM Server's resources folder.&#x20;

**DO NOT install both Halogen and LED versions.**
{% endhint %}

5. Open your server.cfg and find where you see a number of lines that start with the word 'ensure'.  The default resources are usually included and appear like below.&#x20;

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
```

6. Below these lines is where you will add this resource with ONE of the following lines, depending on what folder you moved into your Resources folder.

```lua
ensure LGMods_TrafficLights_Halogen
-- OR
ensure LGMods_TrafficLights_LED
```

7. Restart your server. Some resources can be loaded while the server is running using the start command, however prop files can usually have problems using this method as such we recommend you restart your server after installation.

{% hint style="info" %}
All players that join must 'stream' the asset to their computer for the first time they connect to the server. There may be a very short delay in the objects appearing for the first time for each user. The objects will cache and will appear instantly after the first time.
{% endhint %}

### GTA5 Single Player

{% hint style="warning" %}
You will need [OpenIV](https://openiv.com/) to install these files. We suggest following [this guide](https://openiv.com/?p=1132) in setting up OpenIV to use mod files to avoid overwriting your original game files.
{% endhint %}

To install the files into your single player game, you need to install the files from **one** of the folders (LGMods\_TrafficLights\_Halogen **OR** LGMods\_TrafficLights\_LED) into the following path, overwriting if prompted.&#x20;

```
Grand Theft Auto V\mods\x64h.rpf\levels\gta5\props\roadside\v_traffic_lights.rpf\
```

This path can be opened in OpenIV and files replaced. Start GTA5 and your traffic lights should be now be the British varient.

## Configuration

There are no configurable options for this product. Simply install the resource into FiveM or the files into GTA5 and it is good to go.


# British Speedbumps

## Product Information

Purchase - [Tebex Store - British Speedbumps ](https://store.lgmods.co.uk/package/5779528)

The LGMods British Speedbumps introduces throughout various locations across the GTA5 map. Following a British theme, you will find the speedbumps at Mirror Park, Davis area (Grove Street/Forum Drive/Jamestown Area), Mirror Park and the Bridge Street Area. You can place your own if you know how, too.

{% hint style="warning" %}
Be aware that this product is encrypted and distributed via Tebex for the FiveM platform only. Editing of some content will be restricted.

You cannot install this product directly into GTA5 as a modification and must use the FiveM platform to use it as a streamed resource.
{% endhint %}

## Contents

<table data-full-width="false"><thead><tr><th width="226">File/[Folder]</th><th width="289">Information</th><th>Required to be configured?</th><th data-hidden></th></tr></thead><tbody><tr><td>[stream]</td><td>Contains the prop models and textures.</td><td>No - Do not edit</td><td></td></tr><tr><td>.fxap</td><td>A FiveM file required to be included within the resource folder for the modification to load</td><td>No - Do not edit</td><td></td></tr><tr><td>fxmanifest.lua</td><td>FiveM config file to determine what files need to be loaded/streamed. Do not edit</td><td>No - Do not edit</td><td></td></tr></tbody></table>

{% hint style="danger" %}
Do not edit the files within this resource folder. LGMods will not provide assistance to you if you have edited files within this resource.
{% endhint %}

## Installation

{% hint style="info" %}
These instructions assume you have a working FiveM server that you can already connect to without issue. Please see [here](https://docs.fivem.net/docs/server-manual/setting-up-a-server/) for more information on setting up a FiveM server.
{% endhint %}

1. Find the 'resources' folder within your FiveM server installation. It should be in the same location as your server.cfg.&#x20;
2. Download the LG Mods product from your [FiveM Keymaster](https://keymaster.fivem.net/), if you haven't already.
3. Extract the files from the ZIP archive you downloaded into the 'Resources' folder.
4. The folder inside the 'Resources' folder should be 'LGMods\_Speedbumps' and within it you see the files listed above.&#x20;

{% hint style="info" %}
If you find another folder inside the LGMods\_Speedbumps folder, then you need to make sure the contents are moved so that the files above are within the first directory you open from the resources folder, otherwise the addon will not load
{% endhint %}

5. Open your server.cfg and find where you see a number of lines that start with the word 'ensure'.  The default resources are usually included and appear like below.&#x20;

```lua
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
```

6. Below these lines is where you will add this resource with the following line

```
ensure LGMods_Speedbumps
```

7. Restart your server. Some resources can be loaded while the server is running using the start command, however prop files can usually have problems using this method as such we recommend you restart your server after installation.

{% hint style="info" %}
All players that join must 'stream' the asset to their computer for the first time they connect to the server. There may be a very short delay in the objects appearing for the first time for each user. The objects will cache and will appear instantly after the first time.
{% endhint %}

## Configuration

There are no configurable options for this product. Simply install the resource and it is good to go.

## Prop Classnames

You can spawn the speedbump props using your own methods. The class names are available below.

<table><thead><tr><th width="318">Classname</th><th width="392">Name</th><th data-hidden>Classname</th></tr></thead><tbody><tr><td>prop_speedbump</td><td>Speedbump prop</td><td><code>lgmods_cone</code></td></tr></tbody></table>


