# NoLimits Phone Snatcher Installation Guide

***

## Step 1 : Downloading the Script <a href="#install-dependencies" id="install-dependencies"></a>

{% hint style="success" %}
First, purchase the **NoLimits Phone Snatcher** from the [NoLimits Store](https://no-limits.tebex.io/). Once purchased, you'll find the download available in your [<mark style="color:red;">**Keymaster Account**</mark>](https://keymaster.fivem.net/).
{% endhint %}

{% hint style="danger" %}
️**Important:** Be sure to buy the script using the same [<mark style="color:red;">Keymaster account</mark>](https://keymaster.fivem.net/) that is linked to your server. Otherwise, you may encounter an error stating:\
\&#xNAN;**"You lack the required entitlement."**
{% endhint %}

***

## Step 2 : Resource Transfer

{% hint style="success" %}
After downloading the script, extract the ZIP file and upload the folder to your server’s `resources` directory.
{% endhint %}

If you are using **FTP**, please ensure you use [**WinSCP** ](https://winscp.net/eng/download.php)to transfer the resource to the server. If you use FileZilla, you may encounter the error "**Failed to verify protected resource**"\
Resource Dependency

***

## Step 3 : Required Dependencies

<table><thead><tr><th width="523">Resource</th><th>Download Link</th><th data-hidden data-type="content-ref"></th><th data-hidden data-type="files"></th><th data-hidden></th></tr></thead><tbody><tr><td><strong>ox_lib</strong></td><td><a href="https://github.com/overextended/ox_lib/releases"><mark style="color:red;"><strong>Download</strong></mark></a></td><td><a href="https://www.gitbook.com/integrations#analytics">https://www.gitbook.com/integrations#analytics</a></td><td></td><td></td></tr><tr><td><strong>pure-minigame</strong></td><td><a href="https://github.com/purescripts-fivem/pure-minigames"><mark style="color:red;">Download</mark></a></td><td><a href="https://www.gitbook.com/integrations#support">https://www.gitbook.com/integrations#support</a></td><td></td><td></td></tr></tbody></table>

***

## Step 4: Starting the Resource

Add the script to your `server.cfg`, making sure it's started in the correct order. Here's an example layout:

```
ensure ox_lib                # Ensure dependencies are started first
ensure es_extended/qb-core   # Core framework must start before this

# Start NoLimits Phone Snatcher
ensure nl-phonesnatcher

# Other server resources follow

```

***

## Step 5 : Inventory Assets

{% hint style="success" %}
Inside the resource folder, look for the `INSTALL` directory. Copy all item images from there to your inventory system’s image folder.
{% endhint %}

{% hint style="info" %}
Additionally, make sure all necessary items are added to your server's item list for the script to function properly.
{% endhint %}

<details>

<summary>ESX</summary>

```
INSERT INTO `items` (name, label, weight) VALUES
	('flipper_hacking','Flipper Hacking', 1),
	('aphone','aPhone 24', 1),
	('samsamphone','Samsam S55 Ultra', 1)
;
```

</details>

<details>

<summary>QS INVENTORY</summary>

```
['flipper_hacking']               = {
    ['name'] = 'flipper_hacking',
    ['label'] = 'Flipper Hacking',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'flipper_hacking.png',
    ['unique'] = false,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'A hacking device'
},
['aphone']               = {
    ['name'] = 'aphone',
    ['label'] = 'aPhone 24',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'aphone.png',
    ['unique'] = false,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'Very expensive phone'
},
['samsamphone']               = {
    ['name'] = 'samsamphone',
    ['label'] = 'Samsam S55 Ultra',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'samsamphone.png',
    ['unique'] = false,
    ['useable'] = true,
    ['shouldClose'] = true,
    ['combinable'] = nil,
    ['description'] = 'Very expensive phone'
},
```

</details>

<details>

<summary>NEW QBCore</summary>

```
    flipper_hacking = { 
        name = 'flipper_hacking', 
        label = 'Flipper Hacking', 
        weight = 100, 
        type = 'item', 
        image = 'flipper_hacking.png', 
        unique = false, 
        useable = false, 
        shouldClose = false, 
        description = 'A hacking device' 
    },
    aphone = { 
        name = 'aphone', 
        label = 'aPhone 24', 
        weight = 100, 
        type = 'item', 
        image = 'aphone.png', 
        unique = false, 
        useable = false, 
        shouldClose = false, 
        description = 'Very expensive phone' 
    },
    samsamphone = { 
        name = 'samsamphone', 
        label = 'Samsam S55 Ultra', 
        weight = 100, 
        type = 'item', 
        image = 'samsamphone.png', 
        unique = false, 
        useable = false, 
        shouldClose = false, 
        description = 'Very expensive phone' 
    },
```

</details>

<details>

<summary>OLD QBCore</summary>

```
    ["flipper_hacking"] = {
        ["name"] = "flipper_hacking",
        ["label"] = "Flipper Hacking",
        ["weight"] = 100,
        ["type"] = "item",
        ["image"] = "flipper_hacking.png",
        ["unique"] = false,
        ["useable"] = true,
        ["shouldClose"] = true,
        ["combinable"] = nil,
        ["description"] = "A hacking device"
    },
    ['aphone'] = {
        ['name'] = 'aphone', 			  	  		
        ['label'] = 'aPhone 24', 				    
        ['weight'] = 1000, 		
        ['type'] = 'item', 		
        ['image'] = 'aphone.png', 				
        ['unique'] = false, 	
        ['useable'] = false, 	
        ['shouldClose'] = true,	   
        ['combinable'] = nil,   
        ['description'] = 'Very expensive phone'
    },
    ['samsamphone'] = {
        ['name'] = 'samsamphone', 			  	  	
        ['label'] = 'Samsam S55 Ultra', 				
        ['weight'] = 1000, 		
        ['type'] = 'item', 		
        ['image'] = 'samsamphone.png', 		
        ['unique'] = false, 	
        ['useable'] = false, 	
        ['shouldClose'] = true,	   
        ['combinable'] = nil,   
        ['description'] = 'Very expensive phone'
    },
```

</details>

<details>

<summary>OX INVENTORY</summary>

```
['flipper_hacking'] = {
    label = 'Flipper Hacking',
    weight = 1,
    close = true,
},
['aphone'] = {
    label = 'aPhone 24',
    weight = 1,
    close = false,
},
['samsamphone'] = {
    label = 'Samsam S55 Ultra',
    weight = 1,
    close = false,
},
```

</details>

***

## Step 6 : Configuration

{% hint style="success" %}
Customize the script to match your server’s setup.
{% endhint %}

Open-source files are available for editing the framework function. The main configuration of the resource is provided below.

<details>

<summary>Config File</summary>

```

Config = {}

-- =========================
--      General Settings
-- =========================

-- Set 'qb' for QBCore or 'esx' for ESX
Config.Framework = 'esx'

-- Inventory System
Config.UseOxInventory = true     -- Set to true if using ox_inventory

-- Notification System
Config.NotificationSystem = "ox_lib"  -- Only ox_lib is supported

-- Dispatch System: "ps-dispatch", "cd_dispatch", "qs-dispatch", or "custom"
Config.DispatchSystem = "custom"

-- Target System: "ox_target" or "qb-target"
Config.TargetSystem = "ox_target"

-- =========================
--       Gameplay
-- =========================

Config.HackingDevice = 'flipper_hacking'
Config.PriceHackingDevice = 200
Config.SuccessRate = 100  -- Percent chance to succeed (100 = always)
Config.MaxTry = 2
Config.MinTime = 5

-- Alert police on success/fail
Config.AlertPoliceSuccess = true
Config.AlertPoliceFail = true

-- Distances (in meters)
Config.MinDistance = 2.0             -- To snatch a phone
Config.WarningDistance = 8.0         -- 3D text display range
Config.Show3DTextDistance = 5.0      -- Visual cue display range

-- Payment for renting a bike ('cash', 'bank', or 'both')
Config.PaymentMethod = "cash"

-- Type of money rewarded for phone sales
Config.SellMoneyType = "dirty"         -- Options: "cash", "bank", "dirty"
Config.DirtyMoneyItem = "black_money"  -- Item name used for dirty money

-- =========================
--         Peds & Blips
-- =========================

Config.Leader = {
    model = 'u_m_m_streetart_01',
    location = vector4(446.0039, -1235.3147, 28.9584, 355.7636),
    blipenabled = true,
    blipname = 'Phone Snatcher Leader',
    blipsprite = 389,
    blipcolour = 59,
    blipscale = 0.5,
    blipshortrange = true,
}

Config.TargetBlip = {
    enabled = true,
    name = 'Phone Target',
    sprite = 1,
    scale = 1.0,
    colour = 46,
    shortRange = true,
}

Config.Peds = {
    "u_f_y_poppymich_02",
    "u_f_m_miranda_02",
    "u_m_m_bankman",
    "u_m_m_aldinapoli",
}

-- =========================
--         Locations
-- =========================

Config.PedSpawn = {
    vector3(242.6468, -1115.9561, 29.3236),
    vector3(8.1043, -916.9601, 29.9050),
    vector3(212.7151, -593.0364, 43.8679),
    vector3(462.5270, -693.6348, 27.4210),
    vector3(386.7478, -899.6111, 29.4521),
    vector3(-122.8933, -888.5554, 29.3389),
    vector3(-21.6521, -1001.8614, 29.4998),
    vector3(417.1408, -1108.8044, 30.0487),
    vector3(327.1724, -1011.7714, 29.2908),
    vector3(66.1242, -615.9608, 31.9018),
    vector3(280.1768, -620.6162, 42.0211),
}

Config.RentBikeSpawn = vector4(446.9450, -1230.0487, 30.1007, 272.5505)

-- =========================
--       Phone Rewards
-- =========================

Config.Rewards = {
    ['aphone'] = { minPayout = 800, maxPayout = 1200 },
    ['samsamphone'] = { minPayout = 500, maxPayout = 900 },
}

-- =========================
--      Minigame Settings
-- =========================

Config.MinigameSettings = {
    totalNumbers = 1,            -- How many numbers the player has to input
    seconds = 20,                -- Time given for each minigame round
    timesToChangeNumbers = 0,    -- Times the number sequence changes
    amountOfGames = 1,           -- How many rounds to play
    incrementByAmount = 5,       -- Difficulty scaling
}

-- =========================
--           Bmx
-- =========================


Config.Vehicles = {
    ["bmx"] = {
        rentprice = 100 -- Set your desired rent price
    }
}


```

</details>

> **If you need further assistance or help with custom integration, feel free to reach out via the** [**NoLimits support channels**](https://discord.gg/xhCMx7t9Eu)**.**&#x20;

**Happy Snatching!**
