# Discord Community

<https://nuvilstore.com/discord>

<figure><img src="/files/S2wiq67jnfsb6xCKIMcr" alt=""><figcaption></figcaption></figure>


# Common Errors

### Error parsing script / Failed to load script

Your server artifacts are likely outdated. Update your server to version 5181 or above.

***

### **You lack the required entitlement to use \<resource>**

Try restarting your server and make sure your server license key is correct. If you bought the resource on the wrong account, you can transfer it to another account on keymaster.

***

### Failed to verify protected resource

Files were possibly corrupted during transfer. Ensure hidden files are copied; the `.fxap` file in a protected resource must be included. Some FTP programs skip these files.


# nPhone

In this cateogory you will find all the details to install and configure nPhone.


# Installation

We exclusively support qb-core and esx frameworks. While using the script without them is an option, adjustments are required modifying the open-source part of the framework code. If you choose standalone use, please be aware that the Wallet, Music, and Garage apps won't function unless you adapt them accordingly.

## Step 1 - Installing dependences

nPhone relies on one essential dependency: oxmysql. Additionally, for the Music app to function properly, it requires a modified version of xsound. Here are the links to these crucial resources:

{% embed url="<https://github.com/overextended/oxmysql>" %}

{% embed url="<https://github.com/Geloteee/xsound>" %}

## Step 2 - Setting up api keys

To enable the functionality of images, videos, and audio, it is necessary to configure a Cloud Server for file uploads. Below, you will find the path to the API key:

<mark style="color:blue;">nPhone/config/apiKeys\_s.lua</mark>

File uploads can be made throw [Fivemanage](https://fivemanage.com) or [Discord](https://youtu.be/fKksxz2Gdnc), we strongly recommend [Fivemanage](https://fivemanage.com), which provides for free 10GB (+50000 images) of storage, and images are permanently stored.

{% hint style="danger" %}
To use ChatGPT APP, you will have to set up an [OpenAI API Key](https://www.youtube.com/watch?v=aVog4J6nIAU).
{% endhint %}

## Step 3 - Start order

On the server.cfg, you will have to start the resources in this order:

```
ensure oxmysql
ensure xsound

ensure frameworkName
ensure inventoryName
ensure voiceSystemName

ensure nPhone
```

## Step 4 - Creating SQL tables

When we have all set, we can start the script and it will automatically create the SQL tables.

{% hint style="danger" %}
If you don't have the latest version of MariaDB it won't work.
{% endhint %}

{% hint style="info" %}
If you want to install the SQL manually, you can get the SQL file on:\
\
*<mark style="color:blue;">nPhone/config/installation/nPhone.sql</mark>*
{% endhint %}

## Finishing - Last steps

If you are using the supported frameworks ([*<mark style="color:orange;">**esx**</mark>*](https://github.com/esx-framework/esx_core) *or* [*<mark style="color:red;">**qbcore**</mark>*](https://github.com/qbcore-framework/qb-core)), the supported voice systems **(**[<mark style="color:orange;">**pma-voice**</mark>](https://github.com/AvarianKnight/pma-voice)**,** [<mark style="color:red;">**mumble-voip**</mark>](https://github.com/FrazzIe/mumble-voip-fivem) **or** [<mark style="color:yellow;">**saltychat**</mark>](https://github.com/v10networkscom/saltychat-fivem)**)** and the supported inventory systems **(**[<mark style="color:orange;">**qb-inventory**</mark>](https://github.com/qbcore-framework/qb-inventory)**,** [<mark style="color:red;">**qs-inventory**</mark>](https://buy.quasar-store.com/package/4770732)**,** [<mark style="color:yellow;">**ps-inventory**</mark>](https://github.com/Project-Sloth/ps-inventory)**,** [<mark style="color:green;">**ox\_inventory**</mark>](https://github.com/overextended/ox_inventory) **or** [<mark style="color:purple;">**lj-inventory**</mark>](https://github.com/loljoshie/lj-inventory)**)**, your installation has been successfully completed. nPhone will automatically detect the framework you are currently using. If you prefer to employ a custom framework, rest assured that our framework code is open source. This allows you the flexibility to modify and tailor it to suit your specific framework requirements. The file paths are as follows:

<table><thead><tr><th width="135">System</th><th>Path</th></tr></thead><tbody><tr><td>Framework</td><td><em><mark style="color:blue;">nPhone/config/frameworks/framework.lua</mark></em></td></tr><tr><td>Voice</td><td><em><mark style="color:blue;">nPhone/config/frameworks/voice.lua</mark></em></td></tr><tr><td>Inventory</td><td><em><mark style="color:blue;">nPhone/config/frameworks/inventory.lua</mark></em></td></tr></tbody></table>


# Exports

On this page, you will find the exports that nPhone has available.

## Template using Exports

{% embed url="<https://github.com/Geloteee/nPhone-test>" %}

## Client Exports

### Set phone display

This export will change the phone display status, it can be <mark style="color:green;">**true**</mark> or <mark style="color:red;">**false**</mark>:

```lua
-- status: bool

exports["nPhone"]:SetPhoneDisplayStatus(status)
```

### Get phone display

This export will get the current phone display status, it can return <mark style="color:green;">**true**</mark> or <mark style="color:red;">**false**</mark>:

```lua
local displayStatus = exports["nPhone"]:GetPhoneStatus()
```

### Get phone availability

This export will get the current phone availability status, it can return <mark style="color:green;">**true**</mark> or <mark style="color:red;">**false**</mark>:

```lua
local availabilityStatus = exports["nPhone"]:GetPhoneAvailability()
```

### Set phone availability

This export will change the availability of the current phone:

```lua
-- status: bool

exports["nPhone"]:SetPhoneAvailability(status)
```

### Show notification

This export will show a notification to the player if the player owns a phone:

```lua
-- title: string
-- text: string
-- time: number
-- img: string
-- sound: string

exports["nPhone"]:ShowNotification(title, text, time, img, sound)
```

### Set flashlight status

This export will change the status of the flashlight, if the player owns a phone:

```lua
-- status: bool

exports["nPhone"]:SetFlashlightStatus(status)
```

### Get flashlight status

This export will get the current flashlight status, it can return <mark style="color:green;">**true**</mark> or <mark style="color:red;">**false**</mark>:

<pre class="language-lua"><code class="lang-lua">-- status: bool

<strong>local flashlightStatus = exports["nPhone"]:GetFlashlightStatus(status)
</strong></code></pre>

## Server Exports

### Set verified status

This export will change the verified status of the user in the app selected:

```lua
-- appName: string
-- username: string
-- status: bool

-- Available apps: y

exports["nPhone"]:SetVerifiedStatus(appName, username, status)
```

### Get verified status

This export will get the verified status of the user in the app selected:

```lua
-- appName: string
-- username: string
-- cb: function

-- Available apps: y

exports["nPhone"]:GetVerifiedStatus(appName, username, function(status)
    print(status)
end)
```

### Set account password

This export will change the account password of the user in the app selected:

```lua
-- appName: string
-- username: string
-- newPassword: string

-- Available apps: nCloud

exports["nPhone"]:ChangeAccountPassword(appName, username, newPassword)
```

### Get app post

This export will get the post content in the app selected:

```lua
-- appName: string
-- username: string
-- cb: function

-- Available apps: y, mail

exports["nPhone"]:GetAppPost(appName, postId, function(content)
    print(json.decode(content))
end)
```

### Remove app post

This export will remove the post in the app selected:

```lua
-- appName: string
-- postId: string

-- Available apps: y, mail

exports["nPhone"]:RemoveAppPost(appName, postId)
```

### Reset phone

This export will reset the selected phone:

```lua
-- phoneId: string

exports["nPhone"]:ResetSmartphone(phoneId)
```

### Get source from number

This export will get the source from a phone number:

<pre class="language-lua"><code class="lang-lua">-- phoneNumber: string

<strong>local sourceNumber = exports["nPhone"]:GetSourceFromNumber(phoneNumber)
</strong></code></pre>

### Show notification

This export will show a notification to the player if the player owns a phone:

```lua
-- source: number
-- title: string
-- text: string
-- time: number
-- img: string
-- sound: string

exports["nPhone"]:ShowNotification(source, title, text, time, icon, sound)
```

### Get phone PIN

This export will get the passcode of a phone:

```lua
-- phoneId: string
-- cb: function

exports["nPhone"]:GetPasscodeFromPhoneId(phoneId, function(passcode)
    print(passcode)
end)
```

### Get source account

This export will get the current player linked account:

```lua
-- source: number

local sourceAccount = exports["nPhone"]:GetSourceCurrentAccount(source)
```

### Send email

This export will send an email to an account:

```lua
-- from: string
-- subject: string
-- content: string
-- profileImg: string
-- to: string

exports["nPhone"]:SendEmail(from, subject, content, profileImg, to)
```

### Get phone call

This export will get the current phone call identifier:

```lua
-- phoneNumber: string

local callId = exports["nPhone"]:GetCall(phoneNumber)
```

### End phone call

This export will end the call:

```lua
-- callId: string

exports["nPhone"]:EndCall(callId)
```

### Is in call

This export will get the phone call status:

```lua
-- phoneNumber: string

local callStatus = exports["nPhone"]:IsInCall(phoneNumber)
```

## Server Events

### Message event

It will be triggered when a text message is sent:

```lua
RegisterNetEvent('nPhone:messageTrigger', function(chat, phone, message, messageId, attachments)
    print(chat, phone, message, messageId, attachments)
end)
```


# Custom Apps

In this category, you will learn how to create the resource for a custom app, and the UI.


# Resource Creation


# SDK Functions

## onOpenApp(appId, cb)

* **appId (string):** this will be the app unique name
* **cb (function):** this function will be executed when the app is oppened

```javascript
SDK.onOpenApp('customApp', () => {
    console.log('Open APP Event Triggered')
})
```

## onCloseApp(appId, cb)

* **appId (string):** this will be the app unique name
* **cb (function):** this function will be executed when the app is closed

```javascript
SDK.onCloseApp('customApp', () => {
  console.log('Close APP Event Triggered')
})
```

## setContextMenu(buttons)

* **buttons (**<mark style="color:red;">**array**</mark>**):** array of objects that contain the buttons information
  * **title (**<mark style="color:purple;">**string**</mark>**):** the label of the button
  * **color (**<mark style="color:purple;">**string**</mark>**):** the button text color

```javascript
SDK.setContextMenu([
  {
    title: 'Click ME',
    color: 'white',
    cb: () => {
      console.log('Button clicked')
    }
  },
])
```

## setPopUp(info)

* **info (**<mark style="color:orange;">**object**</mark>**):** element that contains all the information of the popup that will be created
  * **title (**<mark style="color:purple;">**string**</mark>**):** this is the title of the popup
  * **description (**<mark style="color:purple;">**string-**</mark><mark style="color:blue;">**optional**</mark>**):** this is the description of the popup
  * **input (**<mark style="color:orange;">**object-**</mark><mark style="color:blue;">**optional**</mark>**):** these are the input html attributes
  * **media (**<mark style="color:purple;">**string-**</mark><mark style="color:blue;">**optional**</mark>**):** this is an image or video URL
  * **code (**<mark style="color:purple;">**string-**</mark><mark style="color:blue;">**optional**</mark>**):** this is a big text code
  * **buttons (**<mark style="color:red;">**array**</mark>**):** these are the buttons of the popup
    * **title (**<mark style="color:purple;">**string**</mark>**):** the label of the button
    * **color (**<mark style="color:purple;">**string**</mark>**):** the color of the button text
    * **cb (**<mark style="color:yellow;">**function**</mark>**):** when a button is clicked, this will be triggered
      * **inputContent (**<mark style="color:purple;">**string**</mark>**):** this is an attribute that cb returns with the input value

<pre class="language-javascript"><code class="lang-javascript"><strong>SDK.setPopUp({
</strong>  title: 'This is the title',
  description: 'This is the description',
  code: '958',
  media: 'https://r2.fivemanage.com/pub/zdlyvumu5gkj.png',
  input: {
    type: 'text',
    placeholder: 'Place your text here',
    maxlength: 16
  },
  buttons: [
    {
      title: 'Cancel',
      color: "#FF3A45",
      cb: () => {}
    },
    {
      title: 'Save',
      color: "#0A84FF",
      cb: (inputContent) => {
        console.log(inputContent)
      }
    }
  ]
})
</code></pre>

## fetchNui(fetchName, data, cb, scriptName)

* **fetchName (**<mark style="color:purple;">**string**</mark>**):** this is the name of the nui event
* **data (**<mark style="color:orange;">**object**</mark>**):** this is the object that is sent to the nui handler
* **cb (**<mark style="color:yellow;">**function**</mark>**):** this will return the nui data
* **scriptName (**<mark style="color:purple;">**string**</mark>**):** this is the script name that you want the nui event

```javascript
SDK.fetchNui('getCoords', {}, (returnedData) => {
  console.log(returnedData)
}, 'my-resource-name')
```

## getSettings(cb)

* **cb (**<mark style="color:yellow;">**function**</mark>**):** this will return the entire phone settings

<pre class="language-javascript"><code class="lang-javascript"><strong>SDK.getSettings((settings) => {
</strong>  console.log(settings)
})
</code></pre>

## getLocale(locale, cb)

* **locale (**<mark style="color:purple;">**string**</mark>**):** this is the name of the locale that you will get
* **cb (**<mark style="color:yellow;">**function**</mark>**):** this will return the text in the user's language

<pre class="language-javascript"><code class="lang-javascript"><strong>SDK.getLocale('camera-label', (label) => {
</strong>  console.log(label)
})
</code></pre>

## selectGallery(info)

* **info (**<mark style="color:orange;">**object**</mark>**):** this is the object containing the information of the gallery created
  * **includeImages (**<mark style="color:green;">**boolean**</mark>**):** this will include or exclude images
  * **includeVideos (**<mark style="color:green;">**boolean**</mark>**):** this will include or exclude videos
  * **limit (**<mark style="color:blue;">**number**</mark>**):** this is the limit of selections that the user can do
  * **cb (**<mark style="color:yellow;">**function**</mark>**):** this is will return the images selected by the user

<pre class="language-javascript"><code class="lang-javascript"><strong>SDK.selectGallery({
</strong>  includeImages: true,
  includeVideos: false,
  limit: 3,
  cb: (images) => {
    console.log(images)
  }
})
</code></pre>

## useCamera(info)

* **info (**<mark style="color:orange;">**object**</mark>**):** this will be an object containing all the info regarding to the camera control
  * **defaultConfig (**<mark style="color:orange;">**object**</mark>**):** this will be the starting settings of the camera
    * type (<mark style="color:purple;">string</mark>): this is the type of media that the phone will take by default
    * flash (<mark style="color:green;">boolean</mark>): this is the default status of the flash
    * camera (<mark style="color:purple;">string</mark>): this is the default starting camera
  * **permissions (**<mark style="color:orange;">**object**</mark>**):** this will be the posibilities of the player inside the camera
    * **toggleFlash (**<mark style="color:green;">**boolean**</mark>**):** player can toggle flash
    * **flipCamera (**<mark style="color:green;">**boolean**</mark>**):** player can flip the camera
    * **takePhoto (**<mark style="color:green;">**boolean**</mark>**):** player can take photos
    * **takeVideo (**<mark style="color:green;">**boolean**</mark>**):** player can take videos
  * **cb (**<mark style="color:purple;">**string**</mark>**):** this will return the media URL

```javascript
SDK.useCamera({
  defaultConfig: {
    type: 'photo', // photo, video
    flash: true,
    camera: 'rear', // rear, front
  },
  permissions: {
    toggleFlash: true,
    flipCamera: false,
    takePhoto: false,
    takeVideo: true
  },
  cb: (url) => {
    console.log(url)
  }
})
```

## onSettingsChange(cb)

* **cb (**<mark style="color:yellow;">**function**</mark>**):** this will return the entire phone settings

```javascript
SDK.onSettingsChange((settings) => {
  console.log(settings)
})
```

## isAppInstalled(appId)

* **appId (**<mark style="color:purple;">**string**</mark>**):** this is your app unique identifier

```javascript
const hasAPP = SDK.isAppInstalled('my-app-name')
```


# nv\_SafeZone

In this category you will get all the details to install and configure our script Safe Zones.


# Installation

## Step 1 - Installing dependencies

Our Safe Zones script only relies on one dependency: <mark style="color:purple;">**screenshot-basic**</mark>. Here is the link to the resource:

{% embed url="<https://github.com/citizenfx/screenshot-basic>" %}

## Step 2 - Setting up api key

To enable custom image functionality, it's essential to set up a Discord webhook for file uploads. Access the configuration file and update the API key link.

```lua
Config.WebHook = 'DISCORD_WEBHOOK'
```

If you're unsure how to do this, refer to the following link for guidance:

{% embed url="<https://youtu.be/fKksxz2Gdnc>" %}

## Step 3 - Language

For the optimal experience, you can customize the script language by modifying it in the config file:

```lua
Config.Locale = 'LANG' -- es, en, fr, it, pt, ru, de
```

## Step 4 - Setting up permissions

If you are using <mark style="color:orange;">**esx**</mark> or <mark style="color:red;">**qbcore**</mark>, the script will operate based on the framework permissions. However, for users of the standalone version, you can configure the admin list in:

*<mark style="color:blue;">**nv\_SafeZone\config\frameworks\framework.lua**</mark>**&#x20;**<mark style="color:yellow;">**->**</mark>* <mark style="color:blue;">**Config.IsPlayerAdmin**</mark>

## Finishing - Last steps

With everything set up, we conclude the installation process. If you encounter any issues, please join our Discord and open a support ticket.


# Usage

{% embed url="<https://youtu.be/eiuX7X3YpZ4>" %}


# nv\_DjDesk

In this category you will get all the details to install and configure our DJ DESK.


# Installation

## Step 1 - Installing dependencies

Our DJ script only requires xsound for the sound to function, and <mark style="color:red;">**qb-core**</mark>, <mark style="color:orange;">**esx**</mark>, or a **custom framework** for whitelisting locations. Here is the xsound download link:

{% embed url="<https://github.com/Xogy/xsound>" %}

## Step 2 - Language

For the optimal experience, you can customize the script language by modifying it in the config file:

```lua
Config.Locale = 'LANG' -- es, en, fr, it, pt, ru, de
```

## Step 3 - Microphone

By default, the script utilizes pma-voice. However, if you are not using it, you can customize it to work with your voice system by changing the exports located in the framework file:

*<mark style="color:blue;">**nv\_DjDesk\config\frameworks\framework.lua**</mark>**&#x20;**<mark style="color:yellow;">**->**</mark>* <mark style="color:blue;">**Config.IsPlayerAdmin**</mark>

## Finishing - Last steps

With everything set up, we conclude the installation process. If you encounter any issues, please join our Discord and open a support ticket.


# Creating new stages

## Step 1 - Command

With server permissions, execute the following command to initiate the development tools for generating code to create new stages:

```
/createstage
```

## Step 2 - Creating the stage

With the dev tools open, simply follow the steps to create the stage. If you need clarification, refer to this YouTube tutorial:

{% embed url="<https://youtu.be/Vw2zLsfDwOk>" %}


# nv\_Scoreboard

In this page you will get all the details to install and configure our SCOREBOARD.

{% hint style="danger" %}
WE DO NOT GIVE SUPPORT TO THIS SCRIPT IN OUR DISCORD
{% endhint %}

## Dependences

Our script only needs ESX installed, and it can work without any more dependences. This will be the code in `server.cfg`:

```
ensure es_extended
ensure nv_Scoreboard
```

## Configuration

### Changing/Adding Lenguages

By default, we have **2 lenguages**: <mark style="color:blue;">**English**</mark>**/**<mark style="color:red;">**Spanish**</mark>. You can add more in `Config.Translations` and change the lenguage in `Config.Locale`:

```lua
Config.Locale = 'new_lenguage'

Config.Translations = {
    ['en'] = {
        ['no_perms'] = 'You have to be admin to execute this command!',
        ['updated_default'] = 'Updated your scoreboard to the default theme!',
        ['saved_custom'] = 'You saved your custom color theme!',
        ['event_uploaded'] = 'Event uploaded successfully!',
        ['event_removed'] = 'Event removed successfully!',
    },
    ['es'] = {
        ['no_perms'] = '¡Debes de ser admin para usar este comando!',
        ['updated_default'] = '¡Has actualizado al tema predeterminado!',
        ['saved_custom'] = '¡Has guardado tu tema!',
        ['event_uploaded'] = '¡Has subido el evento!',
        ['event_removed'] = '¡Has eliminado el evento!',
    },
    ['new_lenguage'] = {
        ['no_perms'] = '¡Some text in a custom lenguage!',
        ['updated_default'] = '¡Some text in a custom lenguage!',
        ['saved_custom'] = '¡Some text in a custom lenguage!',
        ['event_uploaded'] = '¡Some text in a custom lenguage!',
        ['event_removed'] = '¡Some text in a custom lenguage!',
    },
}
```

### Changing UI Lenguage

Main Buttons: `nv_Scoreboard\nui\index.html` LINES 23 --> 26

Configuration Buttons: `nv_Scoreboard\nui\index.html` LINES 42 --> 76

### Changing Notifications

By default this value will use <mark style="color:blue;">**ESX notifications**</mark>, if you want to change them, you only have to export your custom notification in <mark style="color:orange;">**Config.Notification**</mark>, here we will leave some examples:

{% tabs %}
{% tab title="okokNotify" %}

```lua
Config.Notification = function(action)
    exports['okokNotify']:Alert("Title", action, 5000, 'type')
end
```

{% endtab %}

{% tab title="skeexsNotify" %}

```lua
Config.Notification = function(action)
    exports["skeexsNotify"]:TriggerNotification({
        ['type'] = "success",
        ['message'] = action
    })
end
```

{% endtab %}

{% tab title="ataNotification" %}

```lua
Config.Notification = function(action)
    exports['ataNotification']:notification('far fa-check-circle text-success','Your Server Name',"SUCCESS", action, 5000)
end
```

{% endtab %}
{% endtabs %}

### Changing Server Logo

Just go into `nv_Scoreboard\nui\media` and replace <mark style="color:purple;">**logo.png**</mark> with your server logo.

### Adding new Business

At the default state of the script, we pre-configurated 8 business, but If you want to add more business you just have to add more tables in Config.Business, here we will leave some examples:

<pre class="language-lua"><code class="lang-lua">Config.Business = {
<strong>    -- Adding new business
</strong>    ['NEW_BUSINESS'] = { -- The image and name of the business
        Job = 'new_business_job_name', -- The job of the business
        Description = 'new_business_description', -- The description of the business
        Status = { -- This is an example. Status1 and following can have a diferent name
            Status1 = {'Variable 1', 'Variable 2', 'Variable 3', 'Variable ...'},
            Status2 = {'Variable 1', 'Variable 2', 'Variable 3', 'Variable ...'},
            Status3 = {'Variable 1', 'Variable 2', 'Variable 3', 'Variable ...'},
            Status4 = {'Variable 1', 'Variable 2', 'Variable 3', 'Variable ...'},
            Status5 = {'Variable 1', 'Variable 2', 'Variable 3', 'Variable ...'},
            Status6 = {'Variable 1', 'Variable 2', 'Variable 3', 'Variable ...'},
            Status7 = {'Variable 1', 'Variable 2', 'Variable 3', 'Variable ...'},
            Status8 = {'Variable 1', 'Variable 2', 'Variable 3', 'Variable ...'},
        }
    },
}
</code></pre>

## In-Game Commands

{% tabs %}
{% tab title="Uploading Events" %}

```
/nv_events_upload [url] [name]
```

|                                               url                                              |                                                 name                                                |
| :--------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------: |
| The URL of the image that you are going to post in **http/https** format or **base64** format. | The name that you are going to asign to the url <mark style="color:orange;">**(IMPORTANT)**</mark>. |
|                                          {% endtab %}                                          |                                                                                                     |

{% tab title="Removing events" %}

```
/nv_events_remove [name]
```

|                                name                               |
| :---------------------------------------------------------------: |
| The **name** of the **image/event** that you are going to remove. |
|                            {% endtab %}                           |

{% tab title="Listing Events" %}

```
/nv_events_list
```

{% hint style="danger" %}
None arguments needed.
{% endhint %}
{% endtab %}
{% endtabs %}

## Giving Command Perms

{% tabs %}
{% tab title="Rockstar" %}

```
add_ace identifier.license:user_data "nv_Scoreboard.admin" allow
```

{% hint style="danger" %}
You have to replace **user\_data** with the admin <mark style="color:yellow;">rockstar</mark> identifier
{% endhint %}
{% endtab %}

{% tab title="Steam" %}

```
add_ace identifier.steam:user_data "nv_Scoreboard.admin" allow
```

{% hint style="danger" %}
You have to replace **user\_data** with the admin <mark style="color:blue;">steam</mark> identifier
{% endhint %}
{% endtab %}

{% tab title="FiveM" %}

```
add_ace identifier.fivem:user_data "nv_Scoreboard.admin" allow
```

{% hint style="danger" %}
You have to replace **user\_data** with the admin <mark style="color:orange;">fivem</mark> identifier
{% endhint %}
{% endtab %}
{% endtabs %}

[Join our Discord](https://discord.com/invite/sERxdnduDM)


