# Home

📚 Welcome to DevM Documentation Hub: Your Ultimate FiveM Scripting Resource! 📚  Explore our guides, tutorials, and API references crafted by experienced developers.


# Fraud V2


# Upgrade to 2.1 (Cheques Update)

1. Install new items corrosponding to your inventory
   1. ox\_inventory [Upgrade to 2.1 (Cheques Update)](/fraud-v2/installation/ox_inventory/upgrade-to-2.1-cheques-update)
   2. qb-inventory [Upgrade to 2.1 (Cheques Update)](/fraud-v2/installation/qb-inventory/upgrade-to-2.1-cheques-update)
   3. qs-inventory [Upgrade to 2.1 (Cheques Update)](/fraud-v2/installation/qs-inventory/upgrade-to-2.1-cheques-update)
2. Run the following SQL file

```sql
ALTER TABLE `devm_fraud`
ADD COLUMN `fullz` LONGTEXT NULL DEFAULT NULL
COLLATE 'utf8mb3_general_ci';
```

3. Done!


# Installation

1. Download the purchased resource from [keymaster](https://keymaster.fivem.net), FiveM's official hub for downloading purchased resources
2. Download the following dependencies

| Resource Name & Link                                                                                                                                                                                                                                                                         |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [es\_extended](https://github.com/esx-framework/esx_core)/[qb-core](https://github.com/qbcore-framework/qb-core)/[qbx\_core](https://github.com/Qbox-project/qbx_core)                                                                                                                       |
| [ox\_lib](https://github.com/overextended/ox_lib/release)                                                                                                                                                                                                                                    |
| [ox\_inventory](https://github.com/overextended/ox_inventory/releases)/[qb-inventory](https://github.com/qbcore-framework/qb-inventory)/[qs-inventory ](https://www.quasar-store.com/package/4770732)(We are open to supporting other inventories, make a [ticket](https://discord.gg/devm)) |
| [ox\_target](https://github.com/overextended/ox_target/releases)/[qb-target](https://github.com/qbcore-framework/qb-target) (We are open to supporting other target systems, make a [ticket](https://discord.gg/devm))                                                                       |
| [devm-minigames](https://keymaster.fivem.net/asset-grants)                                                                                                                                                                                                                                   |

3. Run SQL

```sql
CREATE TABLE `devm_fraud` (
	`identifier` VARCHAR(60) NOT NULL DEFAULT '' COLLATE 'utf8mb3_general_ci',
	`crypto` FLOAT NULL DEFAULT '0',
	`crypto_last_price` INT(11) NULL DEFAULT NULL,
	`dumps` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_bin',
	`sims` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
	`fullz` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
	PRIMARY KEY (`identifier`) USING BTREE,
	CONSTRAINT `dumps` CHECK (json_valid(`dumps`))
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
;

```

4. Install inventory items (different for each inventory system)

{% content-ref url="/pages/jcqnKxREYH4rEXOogCWS" %}
[ox\_inventory](/fraud-v2/installation/ox_inventory)
{% endcontent-ref %}

{% content-ref url="/pages/qzgvJ0Inbfrqz3rT8fWW" %}
[qb-inventory](/fraud-v2/installation/qb-inventory)
{% endcontent-ref %}

{% content-ref url="/pages/IHLMtwsNbL9SdzoVseSf" %}
[qs-inventory](/fraud-v2/installation/qs-inventory)
{% endcontent-ref %}

5. Get a API key from [CoinGecko ](https://www.coingecko.com/en/api)and put it inside of configs/gecko\_config.lua. A demo api key is usually more than enough for most servers.
6. Ensure the scripts in your server.cfg in the following order

   `ensure devm-bridge`\
   `ensure devm-minigames`\
   `ensure devm-fraudv2`


# ox\_inventory

1. Install all the following items into `ox_inventory/data/items.lua`

```lua
-- DevM Fraud v2
	['fraud_laptop'] = {label = 'Fraud Laptop', weight = 2000},
	['trap_phone'] = {label = 'Trap Phone', weight = 500},
	['card_writer'] = {label = 'Card Writer', weight = 700},
	['5g_adapter'] = {label = '5G Adapter', weight = 200},
	['wifi_adapter'] = {label = 'WiFi Adapter', weight = 150},
	['written_card'] = {label = 'Stolen Card', weight = 10},
	['blank_card'] = {label = 'Blank Card', weight = 10},
	['written_sim'] = {label = 'Stolen SIM', weight = 10},
	['blank_sim'] = {label = 'Blank SIM', weight = 10},
	['blank_cheque'] = {label = 'Blank Cheque', weight = 5},
	['cheque'] = {label = 'Cheque', weight = 5},
	['printer'] = {label = 'Cheque Printer', weight = 1500},
```

2. Drag all the images from `item_images` into `ox_inventory/web/images`


# Upgrade to 2.1 (Cheques Update)

Install all the following items into `ox_inventory/data/items.lua`

```lua
	['blank_cheque'] = {label = 'Blank Cheque', weight = 5},
	['cheque'] = {label = 'Cheque', weight = 5},
	['printer'] = {label = 'Cheque Printer', weight = 1500},
```

Drag all the images from `item_images` into `ox_inventory/web/images`


# qb-inventory

Supports qb-inventory 2.0.0+

1. Replace generateTooltipContent function in qb-inventory/html/app.js with the following:

```javascript

generateTooltipContent(item) {
            if (!item) {
                return "";
            }
        
            const itemLabel = item.info && item.info.label ? item.info.label : item.label;
        
            let content = `<div class="custom-tooltip"><div class="tooltip-header">${itemLabel}</div><hr class="tooltip-divider">`;
            const description = item.info && item.info.description 
                ? item.info.description.replace(/\n/g, "<br>") 
                : item.description 
                ? item.description.replace(/\n/g, "<br>") 
                : "No description available.";
        

        

            if (item.info && Object.keys(item.info).length > 0) {
                for (const [key, value] of Object.entries(item.info)) {
                    
                    if (item.name === "5g_adapter" && (key === "assignedSim" || key === "usageCount" || key === "label")) {
                        continue; 
                    }
        
                    if (item.name === "written_sim" && (key === "payoutValue" || key === "name_registered" || key === "label")) {
                        continue;
                    }
        
                    if (item.name === "written_card" && (key === 'label')) {
                        continue;
                    }

                    if (typeof value === "object") {
                        continue;
                    }
        
                    let valueStr = value;
        
                    // Special handling for "attachments" field
                    if (key === "attachments") {
                        valueStr = Object.keys(value).length > 0 ? "true" : "false";
                    }
        
                    content += `<div class="tooltip-info"><span class="tooltip-info-key">${this.formatKey(key)}:</span> ${valueStr}</div>`;
                }
            }
        
            content += `<div class="tooltip-description">${description}</div>`;
            content += `<div class="tooltip-weight"><i class="fas fa-weight-hanging"></i> ${item.weight !== undefined && item.weight !== null ? (item.weight / 1000).toFixed(1) : "N/A"}kg</div>`;
        
            content += `</div>`;
            return content;
        },
        
```

2. Install the following items into `qb-core/shared/items.lua`

<pre class="language-lua"><code class="lang-lua">
<strong>fraud_laptop = { name = 'fraud_laptop', label = 'Fraud Laptop', weight = 2000, type = 'item', image = 'fraud_laptop.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A basic laptop' },
</strong>trap_phone = { name = 'trap_phone', label = 'Trap Phone', weight = 500, type = 'item', image = 'trap_phone.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A basic phone' },

blank_card = { name = 'blank_card', label = 'Blank Card', weight = 10, type = 'item', image = 'blank_card.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A blank card' },
written_card = { name = 'written_card', label = 'Written Card', weight = 10, type = 'item', image = 'written_card.png', unique = true, useable = false, shouldClose = false, combinable = nil, description = 'A written card with someones data' },
<strong>    
</strong>blank_sim= { name = 'blank_sim', label = 'Blank SIM', weight = 10, type = 'item', image = 'blank_sim.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A blank SIM' },
written_sim = { name = 'written_sim', label = 'Written SIM', weight = 10, type = 'item', image = 'written_sim.png', unique = true, useable = false, shouldClose = false, combinable = nil, description = 'A written SIM with someones data' },
    
card_writer = { name = 'card_writer', label = 'Card Writer', weight = 1, type = 'item', image = 'card_writer.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A card reader/writer' },
wifi_adapter = { name = 'wifi_adapter', label = 'WiFi Adapter', weight = 1, type = 'item', image = 'wifi_adapter.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A WiFi module for connecting to the internet' },   
['5g_adapter'] = { name = '5g_adapter', label = '5G Adapter', weight = 1, type = 'item', image = '5g_adapter.png', unique = true, useable = true, shouldClose =  true, combinable = nil, description = 'A 5G module for connecting to the internet' },

printer = { name = 'printer', label = 'Printer', weight = 1500, type = 'item', image = 'printer.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A simple printer' },
blank_cheque= { name = 'blank_cheque', label = 'Blank Cheque', weight = 5, type = 'item', image = 'blank_cheque.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A blank cheque' },
cheque = { name = 'written_cheque', label = 'Cheque', weight =5, type = 'item', image = 'cheque.png', unique = true, useable = false, shouldClose = false, combinable = nil, description = 'A written cheque' },
    
</code></pre>

3. Drag all the images from `item_images` into `qb-inventory/html/images`


# Upgrade to 2.1 (Cheques Update)

Install all the following items into `qb-core/shared/items.lua`

```lua
printer = { name = 'printer', label = 'Printer', weight = 1500, type = 'item', image = 'printer.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A simple printer' },
blank_cheque= { name = 'blank_cheque', label = 'Blank Cheque', weight = 5, type = 'item', image = 'blank_cheque.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A blank cheque' },
cheque = { name = 'written_cheque', label = 'Cheque', weight =5, type = 'item', image = 'cheque.png', unique = true, useable = false, shouldClose = false, combinable = nil, description = 'A written cheque' },
```

Drag all the images from `item_images` into `qb-inventory/html/images`


# qs-inventory

1. Install the following items into either qb-core/shared/items.lua (for qb users) or qs-inventory/shared/items.lua (for esx users) respective to your framework

```lua
    ['fraud_laptop'] = {
        name = 'fraud_laptop',
        label = 'Laptop',
        weight = 2000,
        type = 'item',
        image = 'fraud_laptop.png',
        unique = false,
        useable = true,
        shouldClose = true,
        description = 'A laptop for fraud'
    },
    ['wifi_adapter'] = { 
        name = 'wifi_adapter', 
        label = 'WiFi Adapter', 
        weight = 100, 
        type = 'item', 
        image = 'wifi_adapter.png', 
        unique = false, 
        useable = true, 
        shouldClose =  true, 
        description = 'A WiFi module for connecting to the internet' 
    },   

    ['trap_phone'] = { 
        name = 'trap_phone', 
        label = 'Trap Phone', 
        weight = 500, 
        type = 'item', 
        image = 'trap_phone.png',
        unique = false, 
        useable = true, 
        shouldClose =  true, 
        description = 'A basic phone' 
    },

    ['card_writer'] = {
        name = 'card_writer',
        label = 'MSR 605x',
        weight = 500,
        type = 'item',
        image = 'card_writer.png',
        unique = false,
        useable = true,
        shouldClose = true,
        description = 'A card reader'
    },
    ['5g_adapter'] = {
        name = '5g_adapter',
        label = '5G Adapter',
        weight = 500,
        type = 'item',
        image = '5g_adapter.png',
        unique = false,
        useable = false,
        description = 'A cell adapter to get your laptop connected to the internet!'
    },
    ['blank_card'] = {
        name = 'blank_card',
        label = 'Blank Card',
        weight = 500,
        type = 'item',
        image = 'blank_card.png',
        unique = false,
        useable = false,
        description = 'A blank debit card.'
    },
    ['written_card'] = {
        name = 'written_card',
        label = 'Written Card',
        weight = 500,
        type = 'item',
        image = 'written_card.png',
        unique = true,
        useable = false,
        description = 'A stolen debit card.'
    },
    ['blank_sim'] = {
        name = 'blank_sim',
        label = 'Blank SIM',
        weight = 500,
        type = 'item',
        image = 'blank_sim.png',
        unique = false,
        useable = false,
        description = 'A blank sim card.'
    },
    ['written_sim'] = {
        name = 'written_sim',
        label = 'Written SIM',
        weight = 500,
        type = 'item',
        image = 'written_sim.png',
        unique = true,
        useable = false,
        description = 'A written sim card.'
    },
    ['printer'] = {
        name = 'printer',
        label = 'Printer',
        weight = 1500,
        type = 'item',
        image = 'printer.png',
        unique = false,
        useable = true,
        description = 'A simple printer'
    },
    ['blank_cheque'] = {
        name = 'blank_cheque',
        label = 'Blank Cheque',
        weight = 5,
        type = 'item',
        image = 'blank_cheque.png',
        unique = false,
        useable = true,
        description = 'A blank cheque'
    },
    ['cheque'] = {
        name = 'written_cheque',
        label = 'Cheque',
        weight = 5,
        type = 'item',
        image = 'cheque.png',
        unique = true,
        useable = false,
        description = 'A written cheque'
    },

```

2. Drag all the images from `item_images` into `qs-inventory/html/images`


# Upgrade to 2.1 (Cheques Update)

Install the following items into either qb-core/shared/items.lua (for qb users) or qs-inventory/shared/items.lua (for esx users) respective to your framework

```lua
    ['printer'] = {
        name = 'printer',
        label = 'Printer',
        weight = 1500,
        type = 'item',
        image = 'printer.png',
        unique = false,
        useable = true,
        description = 'A simple printer'
    },
    ['blank_cheque'] = {
        name = 'blank_cheque',
        label = 'Blank Cheque',
        weight = 5,
        type = 'item',
        image = 'blank_cheque.png',
        unique = false,
        useable = true,
        description = 'A blank cheque'
    },
    ['cheque'] = {
        name = 'written_cheque',
        label = 'Cheque',
        weight = 5,
        type = 'item',
        image = 'cheque.png',
        unique = true,
        useable = false,
        description = 'A written cheque'
    },
```

Drag all the images from `item_images` into `qs-inventory/html/images`


# Note for QBOX

1. If you are using qbx\_core, go into `devm-bridge/fxmanifest.lua` and uncomment the two lines that say `uncomment if using qbx_core`


# Common Issues

<details>

<summary>[WARNING] Please rename [script] back to its original name (script)</summary>

To fix this, please rename the mentioned script back to its original name. A list of all of the script's orignal names is provided here [Script Original Names](/script-original-names)

</details>

<details>

<summary>Wi-Fi adapter connected, no internet</summary>

If you're encountering a 404 error or seeing "Device Status: Connected | No Internet," it’s likely because the Wi-Fi zones haven’t been configured in "devm-fraudv2/configs/wifi\_config.lua." Without these zones set up, internet access will be unavailable outside of them. You can also choose to disable these zones if you prefer.

</details>

<details>

<summary>Error parsing script @[script]/[*] in resource [script]: @[script]/[*] : syntax error near '&#x3C;\1>'</summary>

Reinstall the script, and if using a game server, use [WinSCP](https://winscp.net/eng/download.php) to transfer the files.

</details>

<details>

<summary>SCRIPT ERROR: No such export addModel in resource devm-bridge</summary>

Make sure `devm-fraudv2` is started after `devm-bridge`. Start order should be the followinng

`ensure devm-bridge`\
`ensure devm-minigames`\
`ensure devm-fraudv2`

</details>

<details>

<summary>SCRIPT ERROR: No such export AddInventoryItem in resource devm-bridge</summary>

Make sure `devm-fraudv2` is started after `devm-bridge`. Start order should be the followinng

`ensure devm-bridge`\
`ensure devm-minigames`\
`ensure devm-fraudv2`

</details>


# Tea App

https\://devm.cc/product/tea-app


# Installation

1. Drag and drop the resource into your `resources` folder

2. Ensure that it is started **after** lb-phone, ex:

   ```cfscript
   start lb-phone
   start devm-tea-app
   ```

3. The SQL should import automatically, however if it doesnt, run this:&#x20;

   ```sql
   CREATE TABLE IF NOT EXISTS `tea_comments` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `post_id` int(11) NOT NULL,
     `author_identifier` varchar(64) NOT NULL,
     `message` text NOT NULL,
     `created_at` timestamp NULL DEFAULT current_timestamp(),
     PRIMARY KEY (`id`),
     KEY `post_id` (`post_id`),
     CONSTRAINT `tea_comments_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `tea_posts` (`id`) ON DELETE CASCADE
   ) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

   CREATE TABLE IF NOT EXISTS `tea_posts` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `author_identifier` varchar(64) NOT NULL,
     `title` varchar(255) NOT NULL,
     `image_url` text DEFAULT NULL,
     `description` text DEFAULT NULL,
     `created_at` timestamp NULL DEFAULT current_timestamp(),
     `like_count` int(11) NOT NULL DEFAULT 0,
     `dislike_count` int(11) NOT NULL DEFAULT 0,
     PRIMARY KEY (`id`)
   ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

   CREATE TABLE IF NOT EXISTS `tea_post_reactions` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `post_id` int(11) NOT NULL,
     `reactor_identifier` varchar(64) NOT NULL,
     `reaction` enum('like','dislike') NOT NULL,
     `created_at` timestamp NULL DEFAULT current_timestamp(),
     PRIMARY KEY (`id`),
     UNIQUE KEY `uniq_post_reactor` (`post_id`,`reactor_identifier`),
     CONSTRAINT `tea_post_reactions_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `tea_posts` (`id`) ON DELETE CASCADE
   ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

   CREATE TABLE IF NOT EXISTS `tea_profiles` (
     `identifier` varchar(64) NOT NULL,
     `username` varchar(64) NOT NULL DEFAULT '',
     `avatar` text DEFAULT NULL,
     PRIMARY KEY (`identifier`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;

   ```


# Snatchables

https\://store.devm.cc/category/2637138


# Installation

1. Download Resource
   * Download the purchased resource from [keymaster](https://keymaster.fivem.net/asset-grants), FiveM's official hub for downloading purchased resources
2. Download Dependencies

| Resource      | Download Link                                  |
| ------------- | ---------------------------------------------- |
| ox\_lib       | <https://github.com/overextended/ox_lib>       |
| ox\_inventory | <https://github.com/overextended/ox_inventory> |
| ox\_target    | <https://github.com/overextended/ox_target>    |

3. Install Items

<details>

<summary>Items</summary>

````lua
```lua
	['chain'] = {
		label = 'Chain',
		weight = 10,
		client = {
			export = 'devm-snatchables.chain'
		}
	},
	['shoes'] = {
		label = 'Shoes',
		weight = 10,
		
		client = {
			export = 'devm-snatchables.shoes'
		}
	},
```
````

</details>

<details>

<summary>Images</summary>

Drag images from \_INSTALL FIRST/items/images into ox\_inventory/web/images

</details>


# Process Drugs

https\://store.devm.cc/category/2637138


# Installation

1. Download Resource
   * Download the purchased resource from [keymaster](https://keymaster.fivem.net/asset-grants), FiveM's official hub for downloading purchased resources
2. Install Dependencies

| Resource | Download Link                            |
| -------- | ---------------------------------------- |
| ox\_lib  | <https://github.com/overextended/ox_lib> |

3. Install items

<details>

<summary>Items</summary>

ox\_inventory

```lua
	['scale'] = {
		label = 'Scale',
		weight = 1,
	},
```

Other inventories

```sql
INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('scale', 'Scale', 1, 0, 1);
```

</details>

<details>

<summary>Images</summary>

Drag images from \_INSTALL FIRST/items/images into your inventory's images

</details>


# Parking

https\://store.devm.cc/category/2637138


# Installation

1. Run this SQL

```sql
ALTER TABLE `owned_vehicles`
ADD COLUMN IF NOT EXISTS `coords` varchar(150) DEFAULT NULL,
ADD COLUMN IF NOT EXISTS `heading` varchar(50) DEFAULT NULL,
ADD COLUMN IF NOT EXISTS `impound` tinyint(4) NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS `parking` varchar(60) DEFAULT NULL;

```

2. Enjoy the script!


# EBT Card


# Installation

1. Download the resource
   * Download the purchased resource from [keymaster](https://keymaster.fivem.net/asset-grants), FiveM's official hub for downloading purchased resources

2. Install Dependencies

   | Resource                 | Download Link                                  |
   | ------------------------ | ---------------------------------------------- |
   | ox\_lib                  | <https://github.com/overextended/ox_lib>       |
   | ox\_inventory (v2.40.0+) | <https://github.com/overextended/ox_inventory> |
   | devm-bridge              | <https://keymaster.fivem.net/asset-grants>     |

3. Navigate to `ox_inventory/modules/shop` and drag the contents of our shops folder from `_INSTALL FIRST/shops` to replace everything in that folder

4. Run the following sql file which can also be found in `_INSTALL FIRST`

```sql
CREATE TABLE `ebt_applications` (
	`identifier` VARCHAR(50) NOT NULL COLLATE 'utf8mb3_general_ci',
	`applied_at` TIMESTAMP NULL DEFAULT current_timestamp(),
	PRIMARY KEY (`identifier`) USING BTREE
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
;
INSERT INTO `job_grades` (`id`, `job_name`, `grade`, `name`, `label`, `salary`, `skin_male`, `skin_female`) VALUES (41, 'socialworker', 0, 'worker', 'Support', 0, '{}', '{}');
```

5. Install the following item into `ox_inventory/data/items.lua`

```lua
['ebt_card'] = {
	label = 'EBT Card',
	server = {
		export = 'devm-ebt.ebt_card'
	}
},
```

6. Drag the ebt\_card.png image from `_INSTALL FIRST` *to* `ox_inventory/web/images`
7. You have now installed the EBT Card script. To make an item eligible to be purchased with an EBT card, put `ebt = true` under the item in `ox_inventory/data/items.lua` like this

<pre class="language-lua"><code class="lang-lua"><strong>['burger'] = {
</strong>	label = 'Burger',
	weight = 220,
	ebt = true, -- add this 
	client = {
		status = { hunger = 200000 },
		anim = 'eating',
		prop = 'burger',
		usetime = 2500,
		notification = 'You ate a delicious burger'
	},
},
</code></pre>


# Common Issues

{% tabs %}
{% tab title="Unable to checkout through the shop" %}
We have gotten some complaints of customers being unable to checkout through the shop and getting this error

<figure><img src="https://972103723-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnyvDpCS1SHcIskBaYapZ%2Fuploads%2F8sUb04WwSpD1FdUZrTN5%2Fimage.png?alt=media&amp;token=b23dfdc2-cb85-4aaf-85ae-933fb473e064" alt=""><figcaption><p>Error customers are commonly facing</p></figcaption></figure>

This only happens when you obtain a EBT card from outside of our script (i.e using /giveitem to give yourself an EBT card). Make sure that if you want to give yourself an EBT card either use the commands provided or get it from the NPC
{% endtab %}
{% endtabs %}


# Lacing


# Installation

1. Download the resource
   * Download the purchased resource from [keymaster](https://keymaster.fivem.net/asset-grants), FiveM's official hub for downloading purchased resources

2. Install Dependencies

   | Resource      | Download Link                                  |
   | ------------- | ---------------------------------------------- |
   | ox\_lib       | <https://github.com/overextended/ox_lib>       |
   | ox\_inventory | <https://github.com/overextended/ox_inventory> |
   | es\_extended  | <https://github.com/esx-framework/esx_core>    |

3. Configure and enjoy!


# Bridge


# Client-Side

This file documents all client-side exports and event wrappers provided by devm-bridge.

### 🔁 Framework Exports (Client)

#### `GetPlayerData()`

```lua
local data = exports['devm-bridge']:GetPlayerData()
```

#### `DeleteVehicle(vehicle)`

```lua
exports['devm-bridge']:DeleteVehicle(vehicle)
```

#### `GetClosestPed(coords, modelFilter)`

```lua
local ped = exports['devm-bridge']:GetClosestPed(coords)
```

#### `GetClosestPlayer(coords)`

```lua
local ply, dist = exports['devm-bridge']:GetClosestPlayer(coords)
```

#### `GetClosestVehicle(coords)`

```lua
local veh = exports['devm-bridge']:GetClosestVehicle()
```

#### `GetVehicles()`

```lua
local all = exports['devm-bridge']:GetVehicles()
```

#### `SetVehicleProperties(vehicle, props)`

```lua
exports['devm-bridge']:SetVehicleProperties(vehicle, {
    plate = "DEV M"
})
```

***

### 🎯 Targeting System (Client)

#### `addLocalEntity(object, data)`

```lua
exports['devm-bridge']:addLocalEntity(entity, {
    label = 'Open',
    icon = 'fa-solid fa-box',
    onSelect = function() print("Opened") end
})
```

#### `addModel(model, data)`

```lua
exports['devm-bridge']:addModel(`prop_chair_01`, {
    label = 'Sit',
    icon = 'fa-solid fa-chair',
    onSelect = function() end
})
```

#### `addGlobalPlayer(data)`

```lua
exports['devm-bridge']:addGlobalPlayer({
    label = 'Check ID',
    icon = 'fa-solid fa-id-card',
    onSelect = function() end
})
```

#### `disableTarget(state)`

```lua
exports['devm-bridge']:disableTarget(true)
```

***

### 👕 Clothing System (Client)

#### `setPlayerComponentVariation(player, componentId, drawableId, textureId?, paletteId?)`

Unified method to set clothing based on the configured system:

```lua
exports['devm-bridge']:setPlayerComponentVariation(PlayerPedId(), 6, 1, 0)
```

Behavior:

* **illenium**: Uses `setPedComponent()`
* **native**: Direct `SetPedComponentVariation`
* **skinchanger**: Uses native + triggers relevant `skinchanger:change` events

***

### 📣 Synced Events (Client)

These wrap base framework events and redirect them to `devm-bridge` equivalents.

#### `devm-bridge:onPlayerDeath`

| Framework | Original Event                   |
| --------- | -------------------------------- |
| ESX       | `esx:onPlayerDeath`              |
| QBCore    | `hospital:server:SetDeathStatus` |

```lua
AddEventHandler('devm-bridge:onPlayerDeath', function(data)
    -- your code
end)
```

***

#### `devm-bridge:playerLoaded`

| Framework    | Original Event                 |
| ------------ | ------------------------------ |
| ESX          | `esx:playerLoaded`             |
| QBCore / QBX | `QBCore:Client:OnPlayerLoaded` |

```lua
AddEventHandler('devm-bridge:playerLoaded', function(xPlayer, isNew, skin)
    -- your code
end)
```

> `xPlayer`, `isNew`, and `skin` are only passed in **ESX**.

***

### ✅ Notes

* Everything here is **client-side only**.
* All systems auto-detect based on `Framework`, `Target`, and `Clothing` values.
* Use `TriggerEvent('devm-bridge:...')` instead of framework-specific events.


# Server-Side

This section documents all server-side exports from devm-bridge, unified across: Frameworks: es\_extended, qb-core, qbx\_core Inventories: ox\_inventory, qb-inventory, qs-inventory

### 🔁 Core Framework Exports

#### `RegisterUsableItem(item, callback)`

Registers a usable item from inventory.

```lua
exports['devm-bridge']:RegisterUsableItem('usb', function(source)
    print(('Player %s used a USB'):format(source))
end)
```

***

#### `UseItem(id, item)`

Simulates a player using an item.

```lua
exports['devm-bridge']:UseItem(source, 'phone')
```

***

#### `AddMoney(id, amount)`

Adds **cash** to a player.

```lua
exports['devm-bridge']:AddMoney(source, 1000)
```

***

#### `RemoveMoney(id, amount)`

Removes **cash** from a player.

```lua
exports['devm-bridge']:RemoveMoney(source, 500)
```

***

#### `AddAccountMoney(id, account, amount)`

Adds money to a specific account:

* `cash`, `bank`, or `black_money` / `dirty_money`

If `Config.blackMoneyAsItem = true`, it uses inventory instead.

```lua
exports['devm-bridge']:AddAccountMoney(source, 'bank', 2000)
exports['devm-bridge']:AddAccountMoney(source, 'black_money', 100)
```

***

#### `RemoveAccountMoney(id, account, amount)`

Removes money from a specific account.

```lua
exports['devm-bridge']:RemoveAccountMoney(source, 'cash', 500)
```

***

#### `GetAccountMoney(id, account)`

Returns current balance of the selected account.

```lua
local bank = exports['devm-bridge']:GetAccountMoney(source, 'bank')
```

***

#### `GetJob(id)`

Returns the player’s job name.

```lua
local job = exports['devm-bridge']:GetJob(source)
print(job) -- e.g. "police"
```

***

#### `GetWeight(id)`

Returns current carried inventory weight.

```lua
local weight = exports['devm-bridge']:GetWeight(source)
print('Weight:', weight)
```

***

#### `GetIdentifier(id)`

Returns the player’s license identifier.

```lua
local license = exports['devm-bridge']:GetIdentifier(source)
print('License:', license)
```

***

#### `GetCoords(id)`

Returns player’s world coordinates.

```lua
local coords = exports['devm-bridge']:GetCoords(source)
print(json.encode(coords))
```

***

#### `GetName(id)`

Returns the player's full name.

```lua
local name = exports['devm-bridge']:GetName(source)
print('Name:', name)
```

***

#### `Kick(id, reason)`

Kicks the player with a custom reason.

```lua
exports['devm-bridge']:Kick(source, 'Exploiting detected.')
```

***

### 📦 Inventory Exports

Supported for: `ox_inventory`, `qb-inventory`, `qs-inventory`

***

#### `AddInventoryItem(id, item, count, metadata?)`

Adds item to a player’s inventory.

```lua
exports['devm-bridge']:AddInventoryItem(source, 'phone', 1, { serial = "XYZ-123" })
```

***

#### `RemoveInventoryItem(id, item, count, metadata?)`

Removes item from a player’s inventory.

```lua
exports['devm-bridge']:RemoveInventoryItem(source, 'usb', 1)
```

With metadata filtering:

```lua
exports['devm-bridge']:RemoveInventoryItem(source, 'usb', 1, { type = 'data' })
```

***

#### `GetInventoryItem(id, item)`

Returns **first matching** item or default `{ count = 0 }`.

```lua
local phone = exports['devm-bridge']:GetInventoryItem(source, 'phone')
print(phone.count)
```

***

#### `GetInventoryItems(id, item)`

Returns **all slots** of a matching item.

```lua
local allWaterBottles = exports['devm-bridge']:GetInventoryItems(source, 'water')
for _, bottle in pairs(allWaterBottles) do
    print(bottle.count, json.encode(bottle.metadata))
end
```

***

#### `SetItemMetadata(id, slot, metadata)`

Modifies metadata of a given item slot.\
Only works in `ox_inventory` and `qb-inventory`.

```lua
exports['devm-bridge']:SetItemMetadata(source, 4, {
    serial = "NEW-456",
    status = "used"
})
```

***

### 🔄 Notes

* `Framework` must be set to one of: `es_extended`, `qb-core`, `qbx_core`
* `Inventory` must be one of: `ox_inventory`, `qb-inventory`, `qs-inventory`
* `blackMoneyAsItem = true` will store black/dirty money as an inventory item (`Config.blackMoneyAsItem` name)
* All exports are internally adapted to each system’s format:
  * `amount` ➝ `count`
  * `info` ➝ `metadata`
  * `cash` vs `money`

```

Let me know if you want a `README.md` version auto-generated from this, or if you plan to add UI notifications or weapon metadata next!
```


# Fraud (OLD)

https\://store.devm.cc/category/2637138


# Installation

1. Download Resource
   * Download the purchased resource from [keymaster](https://keymaster.fivem.net/asset-grants), FiveM's official hub for downloading purchased resources
2. Download Dependencies

<table><thead><tr><th width="715">Resource</th></tr></thead><tbody><tr><td><a href="https://github.com/overextended/ox_lib/releases">ox_lib</a></td></tr><tr><td><a href="https://github.com/overextended/ox_inventory/releases">ox_inventory</a>/<a href="https://github.com/qbcore-framework/qb-inventory">qb-inventory</a> (We are open to supporting other inventories, make a <a href="https://discord.gg/devm">ticket</a>)</td></tr><tr><td><a href="https://github.com/overextended/ox_target/releases">ox_target</a> (We are open to supporting other target systems, make a <a href="https://discord.gg/devm">ticket</a>)</td></tr><tr><td><a href="https://keymaster.fivem.net/asset-grants">devm-minigames</a></td></tr><tr><td><a href="https://github.com/esx-framework/esx_core">es_extended</a>/<a href="https://github.com/qbcore-framework/qb-core">qb-core</a></td></tr></tbody></table>

3. Run SQL

<details>

<summary>Main SQL</summary>

```sql
CREATE TABLE `devm_fraud` (
	`identifier` VARCHAR(60) NOT NULL DEFAULT '' COLLATE 'utf8mb3_general_ci',
	`crypto` FLOAT NULL DEFAULT '0',
	`dumps` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_bin',
	PRIMARY KEY (`identifier`) USING BTREE,
	CONSTRAINT `dumps` CHECK (json_valid(`dumps`))
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
;
```

</details>

4. Install Items depending on your inventory

{% content-ref url="/pages/6G2vtyf7rjod1AJ8Fjil" %}
[ox\_inventory](/fraud-old/installation/ox_inventory)
{% endcontent-ref %}

{% content-ref url="/pages/mLeHnGGVgvgroKO7uMBU" %}
[qb-inventory](/fraud-old/installation/qb-inventory)
{% endcontent-ref %}


# ox\_inventory

<details>

<summary>Inventory Items</summary>

1. Navigate to `ox_inventory/data/items.lua` and paste the following lines

   ```lua
   ['written_card'] = { label = 'Stolen Card', weight = 10},
   ['laptop'] = { label = 'Laptop', weight = 10,close = true},
   ['msr605x'] = { label = 'MSR 605x', weight = 10},
   ['cell_adapter'] = { label = '4G Module', weight = 10},
   ['blank_card'] = { label = 'Blank Card', weight = 10},
   ```

</details>

<details>

<summary>Inventory Images</summary>

Drag the images from `devm-fraud/_INSTALL FIRST/items/images` *into* `ox_inventory/web/images`

</details>


# qs-inventory

<details>

<summary>Inventory Items</summary>

1. Navigate to qs-inventory/shared/items.lua (ESX) or qb-core/shared/items.lua (QB-Core) and paste the following lines. \*Note: There may already be a laptop item. Feel free to remove it and replace it with ours.

```lua
    -- DEVM FRAUD
    ['laptop'] = {
        name = 'laptop',
        label = 'Laptop',
        weight = 2000,
        type = 'item',
        image = 'laptop.png',
        unique = false,
        useable = true,
        shouldClose = true,
        description = 'A laptop for fraud'
    },
    ['msr605x'] = {
        name = 'msr605x',
        label = 'MSR 605x',
        weight = 500,
        type = 'item',
        image = 'msr605x.png',
        unique = false,
        useable = true,
        shouldClose = true,
        description = 'A card reader'
    },
    ['cell_adapter'] = {
        name = 'cell_adapter',
        label = 'Cellular Adapter',
        weight = 500,
        type = 'item',
        image = 'cell_adapter.png',
        unique = false,
        useable = false,
        description = 'A cell adapter to get your laptop connected to the internet!'
    },
    ['blank_card'] = {
        name = 'blank_card',
        label = 'Blank Card',
        weight = 500,
        type = 'item',
        image = 'blank_card.png',
        unique = false,
        useable = false,
        description = 'A blank debit card.'
    },
    ['written_card'] = {
        name = 'written_card',
        label = 'Written Card',
        weight = 500,
        type = 'item',
        image = 'written_card.png',
        unique = true,
        useable = false,
        description = 'A stolen debit card.'
    },
```

</details>

<details>

<summary>Inventory Images</summary>

Drag the images from `devm-fraud/_INSTALL FIRST/items/images` into `qs-inventory/html/images`

</details>


# qb-inventory

<details>

<summary>Inventory Items</summary>

1. Navigate to `qb-core/shared/items.lua` and paste the following lines

   ```lua
   written_card = { name = 'written_card', label = 'Written Card', weight = 1, type = 'item', image = 'written_card.png', unique = true, useable = false, shouldClose = false, combinable = nil, description = 'A written card with someones data' },
   laptop = { name = 'laptop', label = 'Laptop', weight = 1, type = 'item', image = 'laptop.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A basic laptop' },
   msr605x = { name = 'msr605x', label = 'MSR 605X', weight = 1, type = 'item', image = 'msr605x.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A card reader/writer' },
   cell_adapter = { name = 'cell_adapter', label = 'Cellular Adapter', weight = 1, type = 'item', image = 'cell_adapter.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A 4G Module for connecting to the internet' },
   blank_card = { name = 'blank_card', label = 'Blank Card', weight = 1, type = 'item', image = 'blank_card.png', unique = false, useable = true, shouldClose =  true, combinable = nil, description = 'A card reader/writer' },
   ```

</details>

<details>

<summary>Inventory Images</summary>

Drag the images from `devm-fraud/_INSTALL FIRST/items/images` into `qb-inventory/html/images`

</details>

<details>

<summary>Inventory Labeling</summary>

Put the following code in `qb-inventory/html/js/app.js` under the **`generateDescription`** function near line 336 with the rest of the similar lines

```javascript
case "written_card":
    return `<p><strong>Card Holder: </strong><span>${itemData.info.label}</span></p><p><strong>Card Type: </strong><span>${itemData.info.subtype}</span></p>`;
```

</details>


# Common Issues

{% tabs %}
{% tab title="Crypto purchase not going through/saving" %}
A lot of customers were reporting that their crypto purchases were not going through. This can easily be fixed by following these steps

1. Install [HeidiSQL](https://www.heidisql.com/download.php) and connect to your SQL using your credentials
2. Head over to your server's database
3. Open the devm\_fraud table, and under the table section where it says **`identifier`**, set the **`Length/Set`** value to **`100`**

You can watch this video which shows exactly how the steps should be followed

{% embed url="<https://youtu.be/0-lWPtfJy5U>" %}
{% endtab %}

{% tab title="ATM Issues" %}
A lot of customers were complaining about certain aspects of the script, like the ATM, not working until the server restarted. We are currently working on a fix in the future. In the meantime follow these steps

1. Open your server.cfg, usually located in the same folder as your resources folder
2. At the end of the resources script, write `restart devm-fraud`

Another issue players are facing with ATM's is caused by players having the `stolen_card` item in their inventory. If you give yourself this item without going through the laptop it will break the script.
{% endtab %}
{% endtabs %}


# Script Original Names

* devm-bridge \[<https://store.devm.cc/product/6276918>]
* devm-fraud \[https//store.devm.cc/product/fraud]
* devm-fraudv2  \[https//store.devm.cc/fraudv2]
* devm-ebt \[https//store.devm.cc/product/6308878]
* devm-snatchables \[https//store.devm.cc/product/snatchables]
* devm-dj \[https//store.devm.cc/product/6234332]
* devm-parking \[https//store.devm.cc/product/6290235]
* devm-processdrugs \[https//store.devm.cc/product/6190827]
* devm-lacing \[https//store.devm.cc/product/6508021]
* devm-minigames \[Included with devm-fraud & devm-fraudv2]


