# Pickle Mods


# Dealerships

The best clubs system ever for fivem!

{% embed url="<https://www.youtube.com/watch?v=CWAQbAVS7zc>" %}

## Preview

You can buy the resource here: <https://picklemods.com/>


# Installation

Read carefully to ensure you've done everything required.

## Requirements

* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).
* ESX / QB / QBox, or code your own bridge to make it compatible.

#### Installation <a href="#installation" id="installation"></a>

1. Drag and drop the resource and rename it to **pickle\_dealerships**.
2. Configure the resource to your liking, and setup discord logs in **config\_sv.lua** if you'd like.
3. Ensure the resource in the server.cfg after any dependencies, and restart!
4. Import / Create Dealerships in /dealerships and have fun!


# Clubs

The best clubs system ever for fivem!

{% embed url="<https://www.youtube.com/watch?v=sRce-84LjVg>" %}

## Preview

You can buy the resource here: <https://picklemods.com/>


# Installation

Read carefully to ensure you've done everything required.

## Requirements

* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).
* ESX / QB / QBox, or code your own bridge to make it compatible.

#### Installation <a href="#installation" id="installation"></a>

1. Drag and drop the resource and rename it to **pickle\_clubs**.
2. Configure the resource to your liking, and setup discord logs in **config\_sv.lua** if you'd like.
3. Ensure the resource in the server.cfg after any dependencies, and restart!


# Moneywash

The best moneywash system for any use-case on FiveM!

{% embed url="<https://www.youtube.com/watch?v=fQT-8CD35Rw>" %}

## Preview

You can buy the resource here: <https://store.picklemods.com/>


# Installation

Read carefully to ensure you've done everything required.

## Requirements

* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).
* ESX / QB / QBox, or code your own bridge to make it compatible.

#### Installation <a href="#installation" id="installation"></a>

1. Drag and drop the resource and rename it to **pickle\_moneywash**.
2. Configure the resource to your liking, and setup discord logs in **config\_sv.lua** if you'd like.
3. Ensure the resource in the server.cfg after any dependencies, and restart!


# Tutorial

## Money Counter

You must count the dirty money before processing it, you can use the money\_counter item to place down a personal money counter - then just process the dirty money!

## Money Processor

You must then process the counted money by bringing "Unprocessed Money" to a Money Processor, you can use the money\_processor item to place down a personal money processor - then process it through unlockable businesses and you've now got clean cash to withdraw!


# DJ System

The best music system for any use-case on FiveM!

{% embed url="<https://www.youtube.com/watch?v=rmI1BDnApLw>" %}

## Preview

You can buy the resource here: <https://store.picklemods.com/>


# Installation

Read carefully to ensure you've done everything required. This resource is NOT drag & drop as it requires you to setup the API key for Cloudflare TURN.

## Requirements

* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).
* Kadfilm's FX Lights <https://github.com/kadfilm/kad_fxlights>
* Cloudflare TURN (This is free for up to 1000GB per month at the time of this writing, easy to setup)
* No framework required! Items work with ESX / QB but can be ran item-less for standalone servers automatically.

#### Installation <a href="#installation" id="installation"></a>

1. Drag and drop the resource and rename it to **pickle\_dj**.

2. Install Kadfilm's FX Lights as a seperate resource named **kad\_fxlights** <https://github.com/kadfilm/kad_fxlights>

3. Create a Cloudflare account (if you haven't already)

4. Go to the TURN Server page <https://dash.cloudflare.com/?to=/:account/realtime/turn>

5. You will be asked to include a payment method, however you won't be charged unless you go over their usage limit that month (1000GB at the time of this writing).

6. Click the "Create" button to the right of Overview and Analytics, the name is whatever you prefer.

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

7. Then, open config\_sv.lua and set the corresponding values in ConfigSV.StreamingServer

   ```lua
   ConfigSV.StreamingServer = {
       mode = "cloudflare",
       cloudflare = {
           turnTokenId = "TURN_TOKEN_HERE", -- Turn Token ID
           apiToken = "API_TOKEN_HERE", -- API Token
       }
   }
   ```

   <figure><img src="/files/5AiETL3nI0XXx0bOcDfl" alt=""><figcaption></figcaption></figure>

8. Click "Finish" on the bottom right of that page.

9. Ensure both **pickle\_dj** and **kad\_fxlights** in the server.cfg

10. All set, restart the script and enjoy!

#### Disclaimer

We are not responsible for you going over your limits with Cloudflare's TURN service, please be responsible, monitor, and manage your usage.


# Tutorial

## DJ System Creator

You can use `/createdj` to create new DJ System locations.\
To do so, you must have an admin role which is configurable in `Config.AdminGroups` .\
Once you have the menu up, enjoy creating!

## DJ System Management

You can use `/managedj`  to manage DJ Systems, including it's entities (lights, speakers, etc).\
To do so, you must have an admin role which is configurable in `Config.AdminGroups` .\
Once you have the menu up, enjoy managing the DJ systems!


# Police Job

{% embed url="<https://www.youtube.com/watch?v=OdRg_0c-UYQ>" %}

## Preview

You can buy the resource here: <https://store.picklemods.com/>


# Installation

Read carefully to ensure you've done everything required.

## Requirements

* ESX (1.1+) / QBCore, or code your own bridge to work with your framework. (the bridge is fully accessible!)
* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).

#### Installation <a href="#installation" id="installation"></a>

​1. Drag and drop the resource and rename it to pickle\_policejob.\
2\. Set the FiveManage API Key in the config.lua from [https://fivemanage.com/<br>](https://fivemanage.com/)3. Setup discord logs in config\_sv.lua\
4\. Use `/managepd` to access the department creator, set all locations and departments you want.\
5\. Go to any computer terminal location that you set, and configure ranks and permissions through the Roster.\
6\. Enjoy!


# Tutorial

## Police Job Creator

You can use `/managepd` to create, manage, and delete departments as well as their locations.\
To do so, you must have an admin role which is configurable in `Config.AdminGroups` .\
Once you have the menu up, enjoy creating!

## Computer Terminal

You can use `/pdterminal` inside any vehicle to open the computer terminal, and go to any computer terminal location to use it.

This is where you will hire, fire, and manage department members - as well as manage ranks and permissions as the chief.


# Exports

These are the exports for the resource.

### Server exports

#### Departments

**`GetDepartment(id)`**

Returns the department object for `id`.

```lua
local dept = exports.pickle_policejob:GetDepartment("lspd")
print(dept.label)
```

**`GetDepartmentPermission(id, permission)`**

Returns the value of a named permission on a department.

```lua
local canArrest = exports.pickle_policejob:GetDepartmentPermission("lspd", "arrest")
```

**`GetDepartmentMember(id, source)`**

Returns the department member record for a player.

```lua
local member = exports.pickle_policejob:GetDepartmentMember("lspd", source)
if member then print(member.rank) end
```

**`GetDepartmentRank(id, rankId)`**

Returns the rank object for `rankId` within a department.

```lua
local rank = exports.pickle_policejob:GetDepartmentRank("lspd", "sergeant")
```

**`GetDepartmentEntity(id, entityId)`**

Returns a stored entity (location/asset) for a department.

```lua
local entity = exports.pickle_policejob:GetDepartmentEntity("lspd", "armory_1")
```

**`GetPlayerDepartment(source)`**

Returns the player's current department object.

```lua
local dept = exports.pickle_policejob:GetPlayerDepartment(source)
```

**`GetPlayerDepartmentJob(source)`**

Returns the framework job tied to the player's department.

```lua
local job = exports.pickle_policejob:GetPlayerDepartmentJob(source)
```

**`GetIdentifierDepartment(identifier)`**

Looks up a department by player identifier (offline-safe).

```lua
local dept = exports.pickle_policejob:GetIdentifierDepartment("char1:abc123")
```

**`IsPlayerOnDuty(source)`**

Returns `true` if the player is on duty.

```lua
if exports.pickle_policejob:IsPlayerOnDuty(source) then
    -- on-duty officer logic
end
```

**`SetPlayerDuty(source, onDuty, report)`**

Sets duty state. Pass `report = true` to log to Discord.

```lua
exports.pickle_policejob:SetPlayerDuty(source, true, true)
```

**`IsPlayerDepartmentLeader(source)`**

Returns `true` if the player holds a leader rank.

```lua
if exports.pickle_policejob:IsPlayerDepartmentLeader(source) then
    -- leader-only menu
end
```

**`DoesPlayerHaveEntityPermission(source, id, entityId, onDutyRequired)`**

Permission check against a department entity.

```lua
local allowed = exports.pickle_policejob:DoesPlayerHaveEntityPermission(source, "lspd", "armory_1", true)
```

**`GetTotalCopsOnline()`**

Returns total on-duty officers across all departments.

```lua
local count = exports.pickle_policejob:GetTotalCopsOnline()
if count < 2 then return end -- gate robberies behind a minimum
```

***

#### Department money

**`AddDepartmentMoney(id, amount)`**

Adds funds to a department's balance.

```lua
exports.pickle_policejob:AddDepartmentMoney("lspd", 1000)
```

**`RemoveDepartmentMoney(id, amount)`**

Removes funds from a department's balance.

```lua
exports.pickle_policejob:RemoveDepartmentMoney("lspd", 500)
```

**`GetDepartmentMoney(id)`**

Returns the department's current balance.

```lua
local balance = exports.pickle_policejob:GetDepartmentMoney("lspd")
```

**`AddDepartmentTransaction(id, source, transactionType, amount, reason)`**

Records a transaction against a department.

```lua
exports.pickle_policejob:AddDepartmentTransaction("lspd", source, "expense", 500, "Equipment purchase")
```

***

#### Evidence / files

**`AddEvidence(coords, evidenceType, data)`**

Spawns an evidence record at the given coords.

```lua
exports.pickle_policejob:AddEvidence(vector3(123.4, 567.8, 90.1), "shellcasing", {
    weapon = "WEAPON_PISTOL",
    shooter = "char1:abc123",
})
```

**`CreateFile(source, file)`**

Creates a case file.

```lua
exports.pickle_policejob:CreateFile(source, {
    title = "Robbery on Vinewood",
    content = "<p>Suspect fled north...</p>",
})
```

**`UpdateFile(source, id, file)`**

Updates an existing case file.

```lua
exports.pickle_policejob:UpdateFile(source, fileId, { content = "<p>Updated notes...</p>" })
```

**`DeleteFile(source, id)`**

Deletes a case file.

```lua
exports.pickle_policejob:DeleteFile(source, fileId)
```

***

#### Player forensics / medical

**`GetPlayerEvidence(source, isCreatingFile)`**

Returns aggregated evidence/identifiers for a player.

```lua
local evidence = exports.pickle_policejob:GetPlayerEvidence(source, true)
```

**`GetPlayerDNA(source)`**

Returns the player's DNA record.

```lua
local dna = exports.pickle_policejob:GetPlayerDNA(targetSrc)
```

**`GetPlayerBAC(source)`**

Returns the player's blood alcohol content.

```lua
local bac = exports.pickle_policejob:GetPlayerBAC(targetSrc)
if bac and bac > 0.08 then print("Over the limit") end
```

**`GetPlayerBloodTest(source)`**

Returns the player's blood test result.

```lua
local blood = exports.pickle_policejob:GetPlayerBloodTest(targetSrc)
```

**`GetPlayerGSR(source)`**

Returns the player's gunshot residue result.

```lua
local gsr = exports.pickle_policejob:GetPlayerGSR(targetSrc)
```

***

### Client exports

#### Duty / department state

**`IsPlayerOnDuty()`**

Returns the local player's duty state.

```lua
if not exports.pickle_policejob:IsPlayerOnDuty() then return end
```

**`GetCurrentDepartment()`**

Returns the local player's current department object (or `nil`).

```lua
local dept = exports.pickle_policejob:GetCurrentDepartment()
```

**`GetLocalDepartments()`**

Returns the table of departments synced to this client.

```lua
local departments = exports.pickle_policejob:GetLocalDepartments()
for id, dept in pairs(departments) do print(id, dept.label) end
```

***

#### Actions / handcuffs

**`IsHandcuffed()`**

Returns `true` if the local player is handcuffed.

```lua
if exports.pickle_policejob:IsHandcuffed() then return end
```

**`UncuffPlayer()`**

Uncuffs the local player.

```lua
exports.pickle_policejob:UncuffPlayer()
```


# Airdrops

## Preview

{% embed url="<https://www.youtube.com/watch?v=77DUie0oAzo>" %}

You can buy the resource here: <https://store.picklemods.com/>


# Installation

Read carefully to ensure you've done everything required.

## Requirements

* ESX (1.1+) / QBCore, or code your own bridge to work with your framework. (the bridge is fully accessible!)
* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).

#### Installation <a href="#installation" id="installation"></a>

​1. Drag and drop the resource and rename it to pickle\_airdrops.

2\. (Optional) Go through the config and see what you'd like to change.\
3\. To use the `/airdrop` command, please give administrator groups and / or users the `airdrop.command` ace permission.\
4\. Enjoy!


# Casinos

{% embed url="<https://www.youtube.com/watch?v=7EKNzdt738U>" %}

## Preview

You can buy the resource here: <https://store.picklemods.com/>


# Installation

Read carefully to ensure you've done everything required.

## Requirements

* ESX (1.1+) / QBCore, or code your own bridge to work with your framework. (the bridge is fully accessible!)
* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).
* [Pickle Consumables](https://github.com/PickleModifications/pickle_consumables) (Optional, to add usage and items for default stores)

#### Installation <a href="#installation" id="installation"></a>

​1. Drag and drop the resource and rename it to pickle\_casinos.\
2\. (Optional) Go through the config and see what you'd like to change.\
3\. (Optional) Setup Discord Logs\
4\. Enjoy!


# Tutorial

## Casinos Creator

You can use `/casinos` to create, manage, and delete casinos as well as their entities.\
To do so, you must have an admin role which is configurable in `Config.AdminGroups` .\
Once you have the menu up, enjoy creating!

## Map Objects

You can use `/mapobjects` to toggle props on the map and in MLOs that are spawned as part of the MLO's ymap / entity set.\
\
Note that it is more ideal for the creator of the map to provide a version / script where you can turn it off by default, so if you want - ask them in their support for a way to do so; but if they say no - don't fret, just use this system!


# Slot Machine Odds & Payout Configuration

This document explains how odds, payouts, RTP, and bonuses work in the slot machine configuration, and how you can safely tune them to reduce profitability without breaking gameplay balance.

### High‑Level Concepts

#### RTP (Return to Player)

* RTP is the **long‑term average payout** of the machine.
* Example: **96% RTP** means that for every $100 wagered over time, $96 is paid back to players.
* **RTP is not affected by max bet size**.
  * Increasing max bet only increases *volatility* (bigger wins & losses).

👉 If players are winning too much *too fast*, the issue is **odds and multipliers**, not RTP alone.

***

### How Winning Works

A win occurs when:

1. A **payline** matches the same symbol across enough reels
2. The match count meets `paylineWinThreshold`
3. The corresponding **multiplier** is applied to the bet

***

### Key Configuration Sections

#### 1️⃣ `reels` — Symbol Appearance Odds

```lua
reels = {10, 10, 10, 10, 10}
```

* Each number represents the **relative chance** of that symbol appearing on each reel.
* **Higher number = higher chance**
* **Lower number = rarer symbol**

Example:

```lua
reels = {15, 12, 10, 10, 15}
```

* Reel 1 & 5 → more likely
* Reel 3 & 4 → less likely

📉 **Lowering these values reduces win frequency**.

***

#### 2️⃣ `pay` — Payout Multipliers (Per Reel Count)

```lua
pay = {0, 0, 0.2, 0.35, 1.25}
```

Each index represents the **multiplier based on how many matching reels you hit**:

| Matches | Multiplier |
| ------- | ---------- |
| 1       | 0x         |
| 2       | 0x         |
| 3       | 0.2x       |
| 4       | 0.35x      |
| 5       | 1.25x      |

#### Example Calculation

* Bet: $10
* Hit 3 symbols → `0.2x`
* Payout: `$10 × 0.2 = $2`

⚠️ This means **not every win is profitable** — low multipliers intentionally cause losses.

📉 **Lowering pay values reduces payout size**.

***

#### 3️⃣ Bonus Symbols & Bonus Odds

```lua
["Bonus Symbol"] = {
    image = "bonus.png",
    reels = {8, 8, 1, 1, 1},
    pay = {0, 0, 0, 0, 0},
}
```

**How Bonus Odds Work**

* Bonus symbols **use the same reel odds system**
* In this example:
  * Reels 1 & 2 → common
  * Reels 3–5 → rare

This creates a **"tease effect"** where players frequently see partial bonuses.

**Reducing Bonus Frequency**

To make bonuses harder to hit:

```lua
reels = {4, 4, 1, 1, 1}
```

✅ This **halves bonus chance**\
❌ Does NOT affect normal symbol odds

***

#### 4️⃣ `bonusFreeSpins`

```lua
bonusFreeSpins = 15
```

* Controls how many free spins are awarded
* Directly affects profitability

📉 Reducing this is one of the **safest ways** to lower payout without impacting normal gameplay.

***

#### 5️⃣ Paylines & Win Frequency

```lua
paylines = {
  {1,1,1,1,1},
  {0,0,0,0,0},
  {2,2,2,2,2},
  ...
}
```

* More paylines = more chances to win
* Fewer paylines = lower hit rate

📉 Removing high‑coverage paylines reduces win frequency.

***

### How to Reduce Player Profitability (Recommended Order)

If players are winning too much:

#### ✅ Best Options (Safe)

1. Lower **bonus symbol reel odds**
2. Reduce **bonusFreeSpins**
3. Slightly reduce **high‑tier multipliers** (4–5 matches)

#### ⚠️ Use Carefully

* Lowering base symbol odds too much can make machines feel "dead"
* Over‑nerfing RTP causes player churn

***

### Common Misconceptions

❌ "Max bet affects RTP"\
✔️ Max bet only affects volatility

❌ "You only win with 5 symbols"\
✔️ You can win with 3+, depending on `pay`

❌ "Pay is per reel"\
✔️ Pay is **based on total matching reels on a payline**

***

### TL;DR

* `reels` → controls **how often** symbols appear
* `pay` → controls **how much** they pay
* Bonus symbols use the same odds logic
* RTP stays constant unless you rebalance payouts

If bonuses are too profitable: **make them rarer, not bigger**.

***

If you want, this doc can be expanded with:

* RTP math examples
* Recommended default tuning values
* "High volatility" vs "casual" presets


# In-Game Store

## Preview

{% embed url="<https://www.youtube.com/watch?v=d58d8tmlPOU>" %}

You can buy the resource here: <https://store.picklemods.com/>


# Installation

## 1. Go to <https://creator.tebex.io/game-servers> and create / link your game server.

Your server.cfg in the end should have `sv_tebexSecret` set.

## 2. Go to <https://creator.tebex.io/packages> and create as many coin packages you want.

You need to write the package's info, then go to the bottom and select **+ Game Server Commands**.&#x20;

Select the game server you've linked in step one, then add a command.&#x20;

Then, paste this in (example is for 100 coins): `pts_givecoins {transaction} {id} 100`&#x20;

Finally, **click the gear icon** for the command on the right. **Set "Require Player to be Online"** to `"Execute the command even if the player is offline".`

## 3. Go to the config.lua of the resource, then set the following values:

\
Config.TebexStoreUrl: Homepage URL of your tebex store in case of the user not being logged in.&#x20;

Config.TebexApiKey: Go to <https://creator.tebex.io/developers/api-keys> and get your "Public Token"&#x20;

Config.ItemImageFolder: URL Directory of your inventory's item's folder (not required but makes daily spin ez)&#x20;

Config.CoinCurrency -> packages: List of all coin package IDs you added in step 2. \
This can be found by going to <https://creator.tebex.io/packages>, then click the package to edit it.\
The package ID will be whatever number is at the end of the URL. (Usually 7+ digits)

Config.StoreManagers: List of identifiers that can manage the store and manage coins.

## 4. Go to the configsv.lua of the resource, then set the following values:

ConfigSV.Webhooks: List of different webhooks set for purchases and coin modification.

## 5. Restart the server with `pickle_store` ensured in the server.cfg, and enjoy!

If you have any questions, be sure to join <https://discord.gg/picklemods> for support.


# Exports

## Server-Side:

```lua
exports.pickle_store:AddCoins(source, amount, [optional] origin)
--Adds coins for the player with the source.
-- Optionally, origin allows you to pass a reason to the discord log webhook.
```

```lua
arguments: source, amount, [optional] origin
```

```lua
exports.pickle_store:RemoveCoins(source, amount, [optional] origin)
--Removes coins for the player with the source.
-- Optionally, origin allows you to pass a reason to the discord log webhook.
```

```
arguments: source, amount, [optional] origin
```

```lua
exports.pickle_store:GetCoins(source)
-- Gets the player's coins by source.
```

```lua
arguments: source
```

```lua
exports.pickle_store:GetUserInfo(source)
-- Gets the player's raw user info (coins, spins, identifiers, etc).
```

```lua
arguments: source
```

## Client-Side:

```lua
TriggerClientEvent("pickle_store:openStore", source)
--Opens the menu.
```

```lua
arguments: source
```


# Tebex & Coin Products

You can use products in Pickle's In-Game Shop from both Tebex and Coins.\
Here's how to each type!

## Tebex Products

1. Go to <https://creator.tebex.io/packages>, and add (or modify) a package.
2. Go down to where it says Game Server Commands, and add a command.<br>

   <figure><img src="/files/GEVOJzOblJHlIFrqaa93" alt=""><figcaption></figcaption></figure>
3. Write the PTS Command you want to use, along with it's format. In this example we will give coins. So we'll use `pts_givecoins {transaction} {id} 100` to give 100 coins.&#x20;
4. Click the gear icon to the right of the command, and set "Require Player To Be Online" to "Execute command even when player is offline" <br>

   <figure><img src="/files/Oa1GJwHDF8dLxgAb5yPd" alt=""><figcaption></figcaption></figure>
5. Save the package, and restart the script in-game to see the package in the store!
6. (Optional) If adding a coin package that's meant just for buying coins, be sure to add it's package ID to `Config.CoinCurrency.packages`.\
   You can get the package's ID by editing it on Tebex, the number is at the end of the URL.

## Coin Products

1. Open the store using /store and click "Add Product"<br>

   <figure><img src="/files/xC8t9ptOcsF9XaZoZnRI" alt=""><figcaption></figcaption></figure>
2. Fill out the product's details, then click "Add Command"<br>

   <figure><img src="/files/YihZTiPCIkkDpBLu3Xtp" alt=""><figcaption></figcaption></figure>
3. Write the PTS Command you want to use, along with it's format. In this example we will give items. So we'll use `pts_giveitem bread 10` to give 10 bread.

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

4. Save the product, and you are now done! You can always add, remove, and edit these products at any time.


# PTS Commands

### Notes:

Any variable like `{this}` you <mark style="color:red;">**do not change**</mark>, you must paste them along with the command.\
Any variable like `this` you <mark style="color:yellow;">**must change**</mark>, and you must set them prior to usage.

### Give Coins

This adds coins to the player.

**Tebex Product:** `pts_givecoins {transaction} {id} amount`\
**Coin Product:** `pts_givecoins amount`

### Give Vehicle

This adds vehicle to a player's garage.

**Tebex Product:** `pts_givecar {transaction} {id} model`\
**Coin Product:** `pts_givecar model`

### Give Vehicle (Custom Plate)

This adds vehicle to a player's garage with a custom plate of their choosing.

**Tebex Product:** `Not Available`\
**Coin Product:** `pts_givecar_plate model`

### Custom Plate Change

This lets the player change their plate to a custom plate of their choosing.

**Tebex Product:** `Not Available`\
**Coin Product:** `pts_plate`

### Give Item

This adds an item or weapon into the player's inventory.

**Tebex Product:** `pts_giveitem {transaction} {id} name amount`\
**Coin Product:** `pts_giveitem name amount`

### Set Job

This sets the player's job.

**Tebex Product:** `pts_setjob {transaction} {id} jobName rankId`\
**Coin Product:** `pts_setjob jobName rankId`


# Rewards System

This is a first of it’s kind rewards system where you can be sure that players keep coming back for more.

As you know, servers have a hard time retaining members, so I invented this system to solve that problem once and for all.

## Preview

{% embed url="<https://www.youtube.com/watch?v=PKH1tC7cQ4M>" %}

### What is this?

This is a first of it’s kind rewards system where you can be sure that players keep coming back for more.

As you know, servers have a hard time retaining members, so I invented this system to solve that problem once and for all.

### Features

* **Achievements System**
  * Create and modify achievements simply by registering it in the config, and assigning values to steps via exports.
  * Getter & Setter Exports are fully available and are encouraged to be used to futher expand your usability of the script.
  * 10+ Achievements are included by default, they include:
    * "Welcome to Los Santos" - First time flying into the city.
      * "Hello, Friend." - Referring your first friend.
      * &#x20;"Downtown" - Visit Legion Square.
      * &#x20;"Long-term Resident" - Play the city for 24 hours.&#x20;
      * "Serve & Protect" - Patrol as emergency services for 1 hour.&#x20;
      * "First Kill" - Kill your first player.&#x20;
      * "Fallen Hero" - Die for the first time.&#x20;
      * "Fast Fast Fast" - Drive 80 miles per hour.&#x20;
      * "Armed to the Teeth" - Equip your first weapon.&#x20;
      * "Wingless Bird" - Skydive for the first time.&#x20;
* **Daily Rewards System**
  * Daily login rewards allow you have players consistently flying into the city to play your server.
  * There are also configurable requirements such as requiring the session time to exceed what you limit it to in the config.
  * Spin the Wheel to unlock a random prize set by you in the config!
* **Referral System**
  * Allow your players to recruit new players by using the built-in referral system!
  * This system automatically allows players to invite others using their own unique referral code and receive rewards for the following:
    * When a referred player claims a daily reward.
    * When a referred player claims an achievement.

You can buy the resource here: <https://store.picklemods.com/>


# Installation

## Installation

Read carefully to ensure you've done everything required.

## Requirements

* ESX (1.1+) / QBCore, or code your own bridge to work with your framework. (the bridge is fully accessible!)
* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).

#### Installation <a href="#installation" id="installation"></a>

​:warning:Make sure you rename the folder from pickle\_rewards-main to pickle\_rewards prior to installing.:warning:

IF YOU ARE USING PICKLE\_XP, MAKE SURE YOU ENSURE IT PRIOR.​

If you miss this step the script will not function as expected.

Navigate to the "\_INSTALL" folder.

Excute the SQL inside your database.

Ensure pickle\_rewards inside your server.cfg. (I recommend putting all the Pickle scripts inside a folder such as \[pickle] and ensuring the folder. i.e. "ensure \[pickle]" )


# Exports

## Server-Side:

```lua
exports.pickle_rewards:AddAchievement(source, achievementId)
--Adds specified achievement for source.
```

```lua
arguments: source, achievementId
```

```lua
exports.pickle_rewards:RemoveAchievement(source, achievementId)
--Removes specified achievement for source.
```

```
arguments: source, achievementId
```

<pre class="language-lua"><code class="lang-lua"><strong>exports.pickle_rewards:GetAchievementStatus(source, achievementId)
</strong></code></pre>

```lua
arguments: source, optional: achievementId
--Returns what the Acievement status is of a specific achievement.
```

```lua
exports.pickle_rewards:IsAchievementComplete(source, achievementId)
```

```lua
arguments: source, achievementId
--Returns if an Achievement is completed, but not claimed.
```

```lua
exports.pickle_rewards:IsAchievementClaimed(source, achievementId)
```

```lua
arguments: source, achievementId
--Retuns if an Achievement is claimed.
```

```lua
exports.pickle_rewards:AddObjectiveValue(source, achievementId, optionId, value)
--Adds the value of the achievements certain option.
```

```lua
arguments: source, achievementId, optionId, value 
--value is numerical(1 or greater). If value needs to be true, set to 1.
```

```lua
exports.pickle_rewards:RemoveObjectiveValue(source, achievementId, optionId, value)
--Removes the value of the achievements certain option.
```

```lua
arguments: source, achievementId, optionId, value 
--value is numerical(1 or greater). If value needs to be true, set to 1.
```

```lua
exports.pickle_rewards:SetObjectiveValue(source, achievementId, optionId, value)
--Sets the value of the achievements certain option.
```

```lua
arguments: source, achievementId, optionId, value 
--value is numerical(1 or greater). If value needs to be true, set to 1.
```

```lua
exports.pickle_rewards:GetObjectiveValue(source, achievementId, optionId)
--Returns the value of the achievements certain option.
```

```lua
arguments: source, achievementId, optionId
```

```lua
exports.pickle_rewards:AddSpins(source, amount)--Adds Spins to source.
```

```lua
arguments: source, amount
--amount is numerical.
```

```lua
exports.pickle_rewards:RemoveSpins(source, amount)--Removes Spins from source.
```

```lua
arguments: source, amount
--amount is numerical.
```

```lua
exports.pickle_rewards:SetSpins(source, amount)
```

```lua
arguments: source, amount
--amount is numerical.
```

```lua
exports.pickle_rewards:GetSpins(source)
```

```lua
arguments: source
--returns a value.
```

```lua
exports.pickle_rewards:GetStreakDay(source)
```

```lua
arguments: source
--Returns the current day of streak.
```

```lua
exports.pickle_rewards:GetReferralCode(source)
```

```lua
arguments: source
--Returns the referral code that's used to invite others.
```

```lua
exports.pickle_rewards:GetReferredCode(source)
```

```lua
arguments: source
--Returns the active referrer of source.
```

```lua
exports.pickle_rewards:GetPlaytime(source)
```

```lua
arguments: source
--Returns the total playtime of source.
```

```lua
exports.pickle_rewards:GetSessionTime(source)
```

```lua
arguments: source
--Returns the total playtime of source in the currect session. 
--(Closing game will reset this)
```

## Client-Side:

```lua
exports.pickle_rewards:OpenMenu(section)
```

```lua
arguments: section
--Opens the menu to a specific section.
```

```lua
exports.pickle_rewards:CloseMenu()
--Closes the menu.
```

```lua
exports.pickle_rewards:IsInMenu()
--Returns if you're in the menu.
```

```lua
exports.pickle_rewards:GetPlaytime()
--Returns the players total play time.
```


# Snippets

Example snippets from achievements to showcase usage.

## Client-Side:

{% code lineNumbers="true" %}

```lua
-- "Downtown" Visit Legion Square
RegisterNetEvent("pickle_rewards:playerLoaded", function() --When player loads in
    CreateThread(function()
        local center = vector3(199.3448, -930.9882, 30.6890) --Center of location
        local radius = 200.0 --How big of a radius around center to trigger
        while not exports.pickle_rewards:IsAchievementComplete("downtown") do --While the acievement is NOT complete
            local coords = GetEntityCoords(PlayerPedId()) --Player's coords
            if #(center - coords) < radius then --If player is within the radius
                TriggerServerEvent("pickle_rewards:achievements:downtownVisited") --Reward the achievement.
                break
            end
            Wait(5000)
        end
    end)
end)
```

{% endcode %}

## Server-Side:

{% code lineNumbers="true" %}

```lua
-- "Downtown" Visit Legion Square
RegisterNetEvent("pickle_rewards:achievements:downtownVisited", function() --The event triggered in above code line 9.
    local source = source --sets source as source.
    if exports.pickle_rewards:IsAchievementComplete(source, "downtown") then return end --if the achievement downtown is complete end function.
    exports.pickle_rewards:SetObjectiveValue(source, "downtown", 1, 1) --sets the achievement downtown's 1st option(only one) to true(1).
end)
```

{% endcode %}


# Bail & Bounty

This is a first-of-it’s-kind system that allows you to have a bail enforcement job! Not only are you able to become a bounty hunter, but you are also able to place players on parole! Players on parole must report to a parole officer for each day that they are placed on bail for, and if they do not comply - they will automatically be placed on the bounty list for bounty hunters to capture.

## Preview

{% embed url="<https://www.youtube.com/watch?v=b-ZV38FXCRI>" %}

### Features

* Bail & Parole System
  * Players who are placed on bail now will be required to attend daily parole meetings with their Parole Officer (NPC).
  * Each meeting, they will be required to go out into the community and do community service to remain compliant.
  * Missing a meeting will result in bail being **automatically revoked**, and will allow bounty hunters to find and detain them for a reward.
  * Players who are on bail will also have an ankle monitor attached to them, which will show their position to all on-duty officers.
  * These ankle monitors can be cut off by the player, and will alert police (requires configuring dispatch event).
  * Bail can be pardoned or revoked by any officer with bail management permission.
* Bounty Hunting
  * Players who have permission to bounty hunt will be able to clock-in and get a loadout.
  * By default they will receive a Tazer, which will not work against non-bounty targets. (This prevents taze abuse)
  * NPC bounties automatically generate, and can have low, medium, or high risk levels.
  * These risk levels contribute to the likelyhood of scenarios being done by the NPC, including:
    * Fleeing on foot
    * Fleeing via vehicle
    * Assault
    * Deadly Assault with a Weapon
  * Players can **take on bounties together**, and when a bounty hunter turns in your bounty - you and them get paid!
  * Turning over player bounties to officers will give the officer and bounty hunter a bonus multiplier.
* Supports ox-target, qb-target, qtarget, and even disabling target!
* Supports ESX and QB, however the bridge is open to create your own tweaks and support for alternative frameworks / target systems.

You can buy the resource here: <https://store.picklemods.com/>


# Installation

## Installation

Read carefully to ensure you've done everything required.

## Requirements

* ESX (1.1+) / QBCore, or code your own bridge to work with your framework. (the bridge is fully accessible!)
* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).

#### Installation <a href="#installation" id="installation"></a>

​:warning:Make sure you rename the folder to pickle\_bailbounty prior to installing.:warning:

IF YOU ARE USING PICKLE\_XP, MAKE SURE YOU ENSURE IT PRIOR.​

If you miss this step the script will not function as expected.

Navigate to the "\_INSTALL" folder.

Add the items and images for said items.

Ensure pickle\_bailbounty inside your server.cfg. (I recommend putting all the Pickle scripts inside a folder such as \[pickle] and ensuring the folder. i.e. "ensure \[pickle]" )


# Exports

## Server-Side:

```lua
exports.pickle_bailbounty:AddBailToRegistry(bail)
--Adds bail entry into registry.
bail: {
        source = GetSourceFromIdentifier(bail.identifier),
        identifier = bail.identifier, -- Character Identifier
        name = bail.name, -- Character Name
        image = bail.image or "NO_IMAGE", -- Image
        issuer = bail.issuer, -- Issuer identifier
        reward = bail.reward, -- Bail amount
        description = bail.description, -- Description of bail recipient
        startdate = bail.startdate, -- Recommended: os.time()
        completiondate = bail.completiondate, -- Recommended: os.time() + (86400 * days)
        nextcompliance = bail.nextcompliance, -- Recommended: os.time() + 86400
        lastcompliance = bail.lastcompliance, -- Recomended: os.time()
        status = bail.status or "compliant",
        sentence = bail.sentence or 0,
}
```

```lua
exports.pickle_bailbounty:RemoveBailFromRegistry(identifier)
-- Removes identifier's bail entry from the registry.
```

```lua
exports.pickle_bailbounty:GetBailStatus(identifier)
-- Gets identifier's bail entry from the registry.
```

```lua
exports.pickle_bailbounty:AddBountyToRegistry(bounty)
-- Removes identifier's bail entry from the registry.
bounty: {
        target = bounty.target, -- Character Identifier
        targetname = bounty.targetname, -- Character Name
        image = bounty.image or "NO_IMAGE", -- Image
        issuer = bounty.issuer, -- Issuer Identifier
        reward = bounty.reward, -- Bounty reward
        description = bounty.description, -- Description of target
        risk = bounty.risk, -- Value must be 1-3. 1 is low, 2 is medium, 3 is high
        sentence = bounty.sentence or 0, -- This will auto-sentence the captured bounty to prison if above 0.
}
```

<pre class="language-lua"><code class="lang-lua"><strong>exports.pickle_bailbounty:RemoveBountyFromRegistry(identifier)
</strong>-- Removes identifier's bounty entry from the registry.
</code></pre>

<pre class="language-lua"><code class="lang-lua"><strong>exports.pickle_bailbounty:GenerateNPCBounty()
</strong>-- Adds a auto-generated NPC bounty to the registry.
</code></pre>

<pre class="language-lua"><code class="lang-lua"><strong>exports.pickle_bailbounty:GetPlayerCurrentBounty(source)
</strong>-- Returns what bounty a player is actively chasing.
</code></pre>

<pre class="language-lua"><code class="lang-lua"><strong>exports.pickle_bailbounty:CancelBounty(identifier, removeEntry)
</strong>-- Cancels the identifier's bounty if in-progress.
identifier: characterIdentifier,
removeEntry: bool (default: false)
</code></pre>

```lua
exports.pickle_bailbounty:IsPlayerBountyHunter(source)
-- Returns if the player is a on-duty bounty hunter.
```


# Firefighter Job

Built-in Fire System & Scenarios

## Preview

{% embed url="<https://www.youtube.com/watch?v=AxDCfFwBL_8>" %}

## What is it?

This is a great system that enables even more roleplay possibilities, and allows your fire department to be able to respond to fires, and extinguish them together!

## Features

* Supports both third-eye and keypress interaction.
* Multiple Department Support
* Unique and Reliable Fire System
* Extinguish Fires with a team, and split rewards based on damage done to the fire.
* XP Support.
* Create your own Fire Types through the config!
* Portable Hose System, Use & Refill with the "watertank" item.
* Firefighter Tools, Including Vehicle Sawing, Dragging Players out of Vehicles, and Carrying Players!
* Department Store, Vehicles, Duty, and Boss Menu (Uses esx\_society / qb-management)
* Players can start fires by starting explosions / fires with weapons / gas tanks (due to FiveM limitations, this does not include things like car explosions).
* Random Fire Scenarios (More are addable in the config!)
* Exports for Fire Targeting (Useful if you'd like to use other hose systems)
* Fire Extinguisher & Firetruck Extinguishing Support
* Dispatch Supportable (Using Config.Alerts to send the event)
* Supports Exports to use in other scripts.
* And more!

## Supported Frameworks

* ESX 1.1+ & Legacy
* QBCore
* Standalone (Code your own bridge)


# Installation

## What do I need?

Use a supported framework or make it work with yours via the bridge folder.

[Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works with any server).

## Installation

:warning:Make sure you rename the folder from pickle\_firefighterjob-main to pickle\_firefighterjob prior to installing.:warning:

If you miss this step the script will not function as expected.

Navigate to the "\_INSTALL" folder.

Import the images in the \_INSTALL/images folder to your inventory image folder. (Varies on framework)

Run the SQL for ESX, or into the shared/items.lua for QB-Core.

{% tabs %}
{% tab title="ESX Job & Items" %}
Run the SQL for ESX Jobs, and Items located in the \_INSTALL Folder.
{% endtab %}

{% tab title="QBCORE Job" %}

```lua
['firefighter'] = {
    label = 'Firefighter',
    defaultDuty = true,
    offDutyPay = false,
    grades = {
        ['0'] = {
            name = 'Recruit',
            payment = 0
        },
        ['1'] = {
            name = 'Operator',
            payment = 0
        },
        ['2'] = {
            name = 'Company Officer',
            payment = 0
        },
        ['3'] = {
            name = 'Chief',
            isboss = true, 
            bankAuth = true,
            payment = 0
        },
    },
},
```

{% endtab %}

{% tab title="qb-inventory" %}

```lua
["watertank"] 					= {["name"] = "watertank",  	     		        ["label"] = "Water Tank",	 		    ["weight"] = 1, 		["type"] = "item", 		["image"] = "watertank.png", 				["unique"] = false, 	    ["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
```

{% endtab %}

{% tab title="ox\_inventory" %}

```lua
['watertank'] = {
    label = 'Water Tank',
    weight = 1,
    stack = true,
    close = true,
    description = nil
},
```

{% endtab %}
{% endtabs %}


# Commands

These are the commands in this resource

#### /startfirescene \[index / name]

This will start a scenario from the config. This will stop the current scenario before starting.

```
-- Both of these commands start the franklin house fire scenario.
/startfirescene franklin
/startfirescene 1
```

#### /stopfirescene

This will stop the current scenario that is in-progress.

Examples:&#x20;

```
-- This will stop the current scenario that is in-progress.
/stopfirescene
```

#### /stopfires

This will stop all active fires in the server.

Examples:&#x20;

<pre><code><strong>/stopfires
</strong></code></pre>


# Exports

This is the list of exports in this resource.

## Client

This is used for fire targeting, which allows you to use external scripts to attack fires.

#### exports.pickle\_firefighterjob:EnableFireTarget(damagePerTick, attackFunction)

```lua
local damagePerTick = 0.1 -- This is how much to damage the fire while attacking.
local range = 10.0 -- Effective range for putting out fires.
exports.pickle_firefighterjob:EnableFireTarget(damagePerTick, function(index, dist)
    return dist < range and IsDisabledControlPressed(1, 24)
end)
```

#### exports.pickle\_firefighterjob:DisableFireTarget()

This is used for when you want to disable fire targeting.

<pre class="language-lua"><code class="lang-lua"><strong>exports.pickle_firefighterjob:DisableFireTarget()
</strong></code></pre>

#### exports.pickle\_firefighterjob:IsFireTargetActive()

This is used for when you want to check if fire targeting is active.

<pre class="language-lua"><code class="lang-lua"><strong>if (exports.pickle_firefighterjob:IsFireTargetActive()) then 
</strong><strong>    print("Target is active!")
</strong>end
</code></pre>

## Server

#### exports.pickle\_firefighterjob:StartFire(coords, (opt) data)

This is used to start a fire, data will allow you to use custom fire data.

<pre class="language-lua"><code class="lang-lua"><strong>local coords = vector3(0.0, 0.0, 0.0)
</strong><strong>local data = {
</strong>    flame = {
        dict = "core",
        particle = "fire_object",
        stack = 3,
        height = 0.4,
        scale = 3.0,
        fireRadius = 1.25,
    },
    smoke = {
        dict = "des_gas_station",
        particle = "ent_ray_paleto_gas_plume_L",
        stack = 3,
        height = 6.0,
        scale = 1.0,
    }
}
local index = exports.pickle_firefighterjob:StartFire(coords, data)
print("Fire Index:", index)
</code></pre>

#### exports.pickle\_firefighterjob:RemoveFire(index)

This is used to remove a fire using the index.

```lua
local index = 10
exports.pickle_firefighterjob:RemoveFire(index)
```

#### exports.pickle\_firefighterjob:StartScenario(index)

This is used to start a scenario using the scenario index.

```lua
local index = 1
exports.pickle_firefighterjob:StartScenario(index)
```

#### exports.pickle\_firefighterjob:StopScenario()

This is used to stop the active fire scenario.

```lua
exports.pickle_firefighterjob:StopScenario()
```


# Snippets

This is the list of snippets in this resource.

If you need help incorperating this resource into scripts that prevent normal usage of this script, join the discord:

{% embed url="<https://discord.gg/picklemods>" %}


# Advanced Crafting


# Installation

Rename the folder to "pickle\_crafting".

Go to the "\_INSTALL" folder.\
\
Run the SQL file.

Add the items & images, and set your inventory images folder in the config.

Install Pickle XP and start it prior to pickle\_crafting if you'd like to use the XP system.\
\
Restart the server.


# Electrician Job


# Installation

Rename the folder to "pickle\_electrician".

Go to the "\_INSTALL" folder.

Add the items & images.

Restart the server.


# Construction Job


# Installation

Rename the folder to "pickle\_construction".

Go to the "\_INSTALL" folder.

Add the items & images.

Restart the server.


# Hunting


# Installation

Rename the folder to "pickle\_hunting".

Go to the "\_INSTALL" folder.

Add the items & images.

Restart the server.


# Documents


# Installation

Rename the folder to "pickle\_documents".

Go to the "\_INSTALL" folder.

Add the items & images.

Restart the server.


# Exports & Examples

This is the list of exports and examples for this resource.

## Server

#### exports.pickle\_documents:GiveDocument(source, name, metadata, cb)

```lua
RegisterNetEvent('qb-cityhall:server:requestId', function(item, hall)
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)
    if not Player then return end
    local itemInfo = Config.Cityhalls[hall].licenses[item]
    if not Player.Functions.RemoveMoney("cash", itemInfo.cost) then return TriggerClientEvent('QBCore:Notify', src, ('You don\'t have enough money on you, you need %s cash'):format(itemInfo.cost), 'error') end
    local info = {}
    if itemInfo then
        exports.pickle_documents:GiveDocument(src, "Drivers", {
            address = "123 Park Rd",
            location = "Los Santos",
            height = "6'1",
            gender= "M",
            eyes = "BROWN",
        }, { takePhoto = true })
    else
        return
    end
    TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[item], 'add')
end)
```

<br>


# Police Tools


# Installation

Rename the folder to "pickle\_policetools".

Go to the "\_INSTALL" folder.

Add the items & images.

Restart the server.


# Pickle Airport

A multi-framework airport system.

## Preview

{% embed url="<https://www.youtube.com/watch?v=IhnLt_K1APo>" %}

## What is it?

This is a multi-framework airport system that's great for players to use as both a end-user and as a job!

It's a great fit for any type of roleplaying server, whether it's Serious RP or not.

With this resource, you will be able to do the following:

* Board Players as Passengers in your Aircraft.
* Pick up NPC Passengers to earn money.
* Pick up shipments to earn money.
* Travel to other airports when other pilots aren't available.
* Pay to board an aircraft through the airport terminal.

## Supported Frameworks

* ESX 1.1+ & Legacy
* QBCore
* Standalone

## License

Do not at any point redistribute this without my permission and credit.

I've already had to issue reports on people selling my Television Script (which is free).

That is not fair to me and to the people who get scammed out of their money.

So please, respect the rules and have fun!


# Installation

Read carefully to ensure you've done everything required.

## What do I need?

Use a supported framework or make it work with yours via the bridge folder.

[Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required)

## Installation

:warning:Make sure you rename the folder from pickle\_airport-main to pickle\_airport prior to installing.​:warning:

If you miss this step the script will not function as expected.

Navigate to the "\_\_INSTALLATION" folder.

{% tabs %}
{% tab title="ESX Job" %}
Execute the SQL provided inside the \_\_INSTALLATION folder.
{% endtab %}

{% tab title="QBCore Job" %}
Navigate to the qb-core/shared/jobs.lua file.

Add the following code after the last job.

```
['airport'] = {
    label = 'Airport',
    defaultDuty = true,
    offDutyPay = false,
    grades = {
        ['0'] = {
            name = 'Recruit',
            payment = 0
        },
        ['1'] = {
            name = 'Pilot',
            payment = 0
        },
        ['2'] = {
            name = 'Lead Pilot',
            payment = 0
        },
        ['3'] = {
            name = 'Air-Traffic Controller',
            isboss = true, 
            bankAuth = true,
            payment = 0
        },
    },
},
```

{% endtab %}
{% endtabs %}

Ensure pickle\_airport inside your server.cfg. (I recommend putting all the Pickle scripts inside a folder such as \[pickle] and ensuring the folder. i.e. "ensure \[pickle]" )


# Hotfixes

#### Falling from the sky on first flight <a href="#falling-from-the-sky-on-first-flight" id="falling-from-the-sky-on-first-flight"></a>

Navigate to pickle\_airport/modules/airports/client.lua

If a fresh install, line 26 should be

Remove it all together.

This will solved the falling from the sky on the first flight. If you're not experiencing this, leave line 26 alone.

​


# Pickle Consumables

A multi-framework consumables system.

## What is this?

This is a first of it’s kind consumables script, which allows you to create custom food, drinks, drugs, and more with just a few lines in the config.

It also supports external statuses like PS-Buffs, which is optional and fully open in the config.

## Features

* Give Consumables
* Share Consumables (split uses)
* Throw Consumables
* Place Consumables on the ground
* 10+ Items included by default
* And more!

## Supported Frameworks

* ESX 1.1+ & Legacy
* QBCore


# Installation

Read carefully to ensure you've done everything required.

## What do I need?

* ESX (1.1+) / QBCore, or code your own bridge to work with your framework. (the bridge is fully accessible!)
* [Ox Lib 17](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).
* A supported inventory (ESX: OX or QS Inventory, QB: Any inventory that uses metadata including QS Inventory.)

## Installation

:warning:Make sure you rename the folder from pickle\_consumables-main to pickle\_consumables prior to installing.:warning:

If you miss this step the script will not function as expected.

Navigate to the "\_INSTALL" folder.

Import the images in the \_INSTALL/images folder to your inventory image folder. (Varies on framework)

Add the items to your SQL if using ESX, or into the shared/items.lua for QB-Core.

{% tabs %}
{% tab title="qb-inventory" %}

```
["cigarette"] = {
    ['name'] =  'cigarette',
    ['label'] =  'Cigarette',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'cigarette.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["cigbox"] = {
    ['name'] =  'cigbox',
    ['label'] =  'Cigarette Box',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'cigbox.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["hamburger"] = {
    ['name'] =  'hamburger',
    ['label'] =  'Hamburger',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'hamburger.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["water"] = {
    ['name'] =  'water',
    ['label'] =  'Water',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'water.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["beer"] = {
    ['name'] =  'beer',
    ['label'] =  'Beer',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'beer.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["soda"] = {
    ['name'] =  'soda',
    ['label'] =  'Soda',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'soda.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["coffee"] = {
    ['name'] =  'coffee',
    ['label'] =  'Coffee',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'coffee.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["egobar"] = {
    ['name'] =  'egobar',
    ['label'] =  'Egobar',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'egobar.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["sandwich"] = {
    ['name'] =  'sandwich',
    ['label'] =  'Sandwich',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'sandwich.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["crisps"] = {
    ['name'] =  'crisps',
    ['label'] =  'Crisps',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'crisps.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["gin_shot"] = {
    ['name'] =  'gin_shot',
    ['label'] =  'Gin Shot',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'gin_shot.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["vodka_shot"] = {
    ['name'] =  'vodka_shot',
    ['label'] =  'Vodka Shot',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'vodka_shot.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["whiskey_bottle"] = {
    ['name'] =  'whiskey_bottle',
    ['label'] =  'Whiskey Bottle',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'whiskey_bottle.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["tequila_bottle"] = {
    ['name'] =  'tequila_bottle',
    ['label'] =  'Tequila Bottle',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'tequila_bottle.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["vodka_bottle"] = {
    ['name'] =  'vodka_bottle',
    ['label'] =  'Vodka Bottle',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'vodka_bottle.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
```

{% endtab %}

{% tab title="ox\_inventory" %}

```
["cigarette"] = {
    label = 'Cigarette',
    weight = 1,
    stack = true,
    description = ""
},
["cigbox"] = {
    label = 'Cigarette Box',
    weight = 1,
    stack = true,
    description = ""
},
["hamburger"] = {
    label = 'Hamburger',
    weight = 1,
    stack = true,
    description = ""
},
["water"] = {
    label = 'Water',
    weight = 1,
    stack = true,
    description = ""
},
["beer"] = {
    label = 'Beer',
    weight = 1,
    stack = true,
    description = ""
},
["soda"] = {
    label = 'Soda',
    weight = 1,
    stack = true,
    description = ""
},
["coffee"] = {
    label = 'Coffee',
    weight = 1,
    stack = true,
    description = ""
},
["egobar"] = {
    label = 'Egobar',
    weight = 1,
    stack = true,
    description = ""
},
["sandwich"] = {
    label = 'Sandwich',
    weight = 1,
    stack = true,
    description = ""
},
["crisps"] = {
    label = 'Crisps',
    weight = 1,
    stack = true,
    description = ""
},
["gin_shot"] = {
    label = 'Gin Shot',
    weight = 1,
    stack = true,
    description = ""
},
["vodka_shot"] = {
    label = 'Vodka Shot',
    weight = 1,
    stack = true,
    description = ""
},
["whiskey_bottle"] = {
    label = 'Whiskey Bottle',
    weight = 1,
    stack = true,
    description = ""
},
["tequila_bottle"] = {
    label = 'Tequila Bottle',
    weight = 1,
    stack = true,
    description = ""
},
["vodka_bottle"] = {
    label = 'Vodka Bottle',
    weight = 1,
    stack = true,
    description = ""
},
```

{% endtab %}

{% tab title="qs-inventory" %}

```
["cigarette"] = {
    ['name'] =  'cigarette',
    ['label'] =  'Cigarette',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'cigarette.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["cigbox"] = {
    ['name'] =  'cigbox',
    ['label'] =  'Cigarette Box',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'cigbox.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["hamburger"] = {
    ['name'] =  'hamburger',
    ['label'] =  'Hamburger',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'hamburger.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["water"] = {
    ['name'] =  'water',
    ['label'] =  'Water',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'water.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["beer"] = {
    ['name'] =  'beer',
    ['label'] =  'Beer',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'beer.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["soda"] = {
    ['name'] =  'soda',
    ['label'] =  'Soda',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'soda.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["coffee"] = {
    ['name'] =  'coffee',
    ['label'] =  'Coffee',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'coffee.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["egobar"] = {
    ['name'] =  'egobar',
    ['label'] =  'Egobar',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'egobar.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["sandwich"] = {
    ['name'] =  'sandwich',
    ['label'] =  'Sandwich',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'sandwich.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["crisps"] = {
    ['name'] =  'crisps',
    ['label'] =  'Crisps',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'crisps.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["gin_shot"] = {
    ['name'] =  'gin_shot',
    ['label'] =  'Gin Shot',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'gin_shot.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["vodka_shot"] = {
    ['name'] =  'vodka_shot',
    ['label'] =  'Vodka Shot',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'vodka_shot.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["whiskey_bottle"] = {
    ['name'] =  'whiskey_bottle',
    ['label'] =  'Whiskey Bottle',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'whiskey_bottle.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["tequila_bottle"] = {
    ['name'] =  'tequila_bottle',
    ['label'] =  'Tequila Bottle',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'tequila_bottle.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
["vodka_bottle"] = {
    ['name'] =  'vodka_bottle',
    ['label'] =  'Vodka Bottle',
    ['weight'] =  1000,
    ['type'] =  'item',
    ['image'] =  'vodka_bottle.png',
    ['unique'] =  false,
    ['useable'] =  true,
    ['shouldClose'] =  true,
    ['combinable'] =  nil,
    ['description'] =  ""
},
```

{% endtab %}
{% endtabs %}


# Hotfixes

## QB-Hud not updating

Inside pickle\_consumables/bridge/qb/server.lua on line 61, look for SetMetaData: and add below it

```
TriggerClientEvent('hud:client:UpdateNeeds', source, xPlayer.PlayerData.metadata.hunger, xPlayer.PlayerData.metadata.thirst)
TriggerClientEvent('hud:client:UpdateStress', source, xPlayer.PlayerData.metadata.stress)
```

This will trigger the update to the HUD. Typically applies to most base HUDS.


# Pickle Farming

A multi-framework Farming system.

## What is this?

This is a multi-framework farming system that's great for players to do as an activity!

It's a great fit for any type of roleplaying server, whether it's Serious RP or not.

With this resource, you will be able to do the following:

* Grow 10+ Different Types of Plants.
* Sync Growth Smoothly.
* Water Plants to Grow Them.
* Process Plants (Multi-step is possible).
* Sell Plants.

## Supported Frameworks

* ESX 1.1+ & Legacy
* QBCore
* Standalone


# Installation

Read carefully to ensure you've done everything required.

## What do I need?

Use a supported framework or make it work with yours via the bridge folder.

[Ox Lib](https://github.com/overextended/ox_lib/releases/) (For the skill mini-game, not required).

## Installation

:warning:Make sure you rename the folder from pickle\_farming-main to pickle\_farming prior to installing.:warning:

If you miss this step the script will not function as expected.

Navigate to the "\_INSTALLATION" folder.

Import the images in the \_INSTALLATION/images folder to your inventory image folder. (Varies on framework)

Run the SQL for ESX, or into the shared/items.lua for QB-Core.

{% tabs %}
{% tab title="qb-inventory" %}

```
["corn_seed"] 							= {["name"] = "corn_seed",  	     		["label"] = "Corn Seed",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "corn_seed.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["corn_raw"] 							= {["name"] = "corn_raw",  	     		["label"] = "Raw Corn",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "corn_raw.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["corn"] 							= {["name"] = "corn",  	     			["label"] = "Corn",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "corn.png", 					["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["tomato_seed"] 						= {["name"] = "tomato_seed",  	     		["label"] = "Tomato Seed",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "tomato_seed.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["tomato_raw"] 							= {["name"] = "tomato_raw",  	     		["label"] = "Tomato Raw",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "tomato_raw.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["tomato"] 							= {["name"] = "tomato",  	     		["label"] = "Tomato",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "tomato.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["wheat_seed"] 							= {["name"] = "wheat_seed",  	     		["label"] = "Wheat Seed",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "wheat_seed.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["wheat_raw"] 							= {["name"] = "wheat_raw",  	     		["label"] = "Wheat Raw",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "wheat_raw.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["wheat"] 							= {["name"] = "wheat",  	     		["label"] = "Wheat",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "wheat.png", 					["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["broccoli_seed"] 						= {["name"] = "broccoli_seed",  	     	["label"] = "Broccoli Seed",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "broccoli_seed.png", 			["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["broccoli_raw"] 						= {["name"] = "broccoli_raw",  	     		["label"] = "Broccoli Raw",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "broccoli_raw.png", 			["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["broccoli"] 							= {["name"] = "broccoli",  	     		["label"] = "Broccoli",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "broccoli.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["carrot_seed"] 						= {["name"] = "carrot_seed",  	     		["label"] = "Carrot Seed",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "carrot_seed.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["carrot_raw"] 							= {["name"] = "carrot_raw",  	     		["label"] = "Carrot Raw",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "carrot_raw.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["carrot"] 							= {["name"] = "carrot",  	     		["label"] = "Carrot",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "carrot.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["potato_seed"] 						= {["name"] = "potato_seed",  	     		["label"] = "Potato Seed",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "potato_seed.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["potato_raw"] 							= {["name"] = "potato_raw",  	     		["label"] = "Potato Raw",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "potato_raw.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["potato"] 							= {["name"] = "potato",  	     		["label"] = "Potato",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "potato.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["pickle_seed"] 						= {["name"] = "pickle_seed",  	     		["label"] = "Pickle Seed",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "pickle_seed.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["pickle_raw"] 							= {["name"] = "pickle_raw",  	     		["label"] = "Pickle Raw",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "pickle_raw.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["pickle"] 							= {["name"] = "pickle",  	     		["label"] = "Pickle",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "pickle.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["weed_seed"] 							= {["name"] = "weed_seed",  	     		["label"] = "Weed Seed",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "weed_seed.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["weed_raw"] 							= {["name"] = "weed_raw",  	     		["label"] = "Weed Raw",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "weed_raw.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["weed"] 							= {["name"] = "weed",  	     			["label"] = "Weed",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "weed.png", 					["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["cocaine_seed"] 						= {["name"] = "cocaine_seed",  	     		["label"] = "Cocaine Seed",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "cocaine_seed.png", 			["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["cocaine_raw"] 						= {["name"] = "cocaine_raw",  	     		["label"] = "Cocaine Raw",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "cocaine_raw.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["cocaine"] 							= {["name"] = "cocaine",  	     		["label"] = "Cocaine",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "cocaine.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["heroin_seed"] 						= {["name"] = "heroin_seed",  	     		["label"] = "Heroin Seed",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "heroin_seed.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["heroin_raw"] 							= {["name"] = "heroin_raw",  	     		["label"] = "Heroin Raw",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "heroin_raw.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["heroin"] 							= {["name"] = "heroin",  	     		["label"] = "Heroin",	 			["weight"] = 25, 		["type"] = "item", 		["image"] = "heroin.png", 				["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["garden_pitcher"] 						= {["name"] = "garden_pitcher",  	     	["label"] = "Garden Pitcher",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "garden_pitcher.png", 			["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["garden_shovel"] 						= {["name"] = "garden_shovel",  	     	["label"] = "Garden Shovel",	 		["weight"] = 25, 		["type"] = "item", 		["image"] = "garden_shovel.png", 			["unique"] = false, 	["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
```

{% endtab %}

{% tab title="ox\_inventory" %}

```
['corn_seed'] = {
    label = 'Corn Seed',
    weight = 1,
    stack = true,
    close = true,
    description = "This is a seed that grows corn."
},

['corn_raw'] = {
    label = 'Raw Corn',
    weight = 1,
    stack = true,
    close = true,
    description = "You will need to process this."
},

['corn'] = {
    label = 'Corn',
    weight = 1,
    stack = true,
    close = true,
},

['tomato_seed'] = {
    label = 'Tomato Seed',
    weight = 1,
    stack = true,
    close = true,
    description = "This is a seed that grows a tomato."
},

['tomato_raw'] = {
    label = 'Raw Tomato',
    weight = 1,
    stack = true,
    close = true,
    description = "You will need to process this."
},

['tomato'] = {
    label = 'Tomato',
    weight = 1,
    stack = true,
    close = true,
},

['wheat_seed'] = {
    label = 'Wheat Seed',
    weight = 1,
    stack = true,
    close = true,
    description = "This is a seed that grows Wheat."
},

['wheat_raw'] = {
    label = 'Raw Wheat',
    weight = 1,
    stack = true,
    close = true,
    description = "You will need to process this."
},

['wheat'] = {
    label = 'Wheat',
    weight = 1,
    stack = true,
    close = true,
},

['broccoli_seed'] = {
    label = 'Broccoli Seed',
    weight = 1,
    stack = true,
    close = true,
    description = "This is a seed that grows broccoli."
},

['broccoli_raw'] = {
    label = 'Raw Broccoli',
    weight = 1,
    stack = true,
    close = true,
    description = "You will need to process this."
},

['broccoli'] = {
    label = 'Broccoli',
    weight = 1,
    stack = true,
    close = true,
},

['carrot_seed'] = {
    label = 'Carrot Seed',
    weight = 1,
    stack = true,
    close = true,
    description = "This is a seed that grows a carrot."
},

['carrot_raw'] = {
    label = 'Raw Carrot',
    weight = 1,
    stack = true,
    close = true,
    description = "You will need to process this."
},

['carrot'] = {
    label = 'Carrot',
    weight = 1,
    stack = true,
    close = true,
},

['potato_seed'] = {
    label = 'Potato Seed',
    weight = 1,
    stack = true,
    close = true,
    description = "This is a seed that grows a potato."
},

['potato_raw'] = {
    label = 'Raw Potato',
    weight = 1,
    stack = true,
    close = true,
    description = "You will need to process this."
},

['potato'] = {
    label = 'Potato',
    weight = 1,
    stack = true,
    close = true,
},

['pickle_seed'] = {
    label = 'Pickle Seed',
    weight = 1,
    stack = true,
    close = true,
    description = "This is a seed that grows a pickle."
},

['pickle_raw'] = {
    label = 'Raw Pickle',
    weight = 1,
    stack = true,
    close = true,
    description = "You will need to process this."
},

['pickle'] = {
    label = 'Pickle',
    weight = 1,
    stack = true,
    close = true,
},

['weed_seed'] = {
    label = 'Weed Seed',
    weight = 1,
    stack = true,
    close = true,
    description = "This is a seed that grows weed."
},

['weed_raw'] = {
    label = 'Raw Weed',
    weight = 1,
    stack = true,
    close = true,
    description = "You will need to process this."
},

['weed'] = {
    label = 'Weed',
    weight = 1,
    stack = true,
    close = true,
},

['cocaine_seed'] = {
    label = 'Cocaine Seed',
    weight = 1,
    stack = true,
    close = true,
    description = "This is a seed that grows cocaine."
},

['cocaine_raw'] = {
    label = 'Raw Cocaine',
    weight = 1,
    stack = true,
    close = true,
    description = "You will need to process this."
},

['cocaine'] = {
    label = 'Cocaine',
    weight = 1,
    stack = true,
    close = true,
},

['heroin_seed'] = {
    label = 'Heroin Seed',
    weight = 1,
    stack = true,
    close = true,
    description = "This is a seed that grows heroin."
},

['heroin_raw'] = {
    label = 'Raw Heroin',
    weight = 1,
    stack = true,
    close = true,
    description = "You will need to process this."
},

['heroin'] = {
    label = 'Heroin',
    weight = 1,
    stack = true,
    close = true,
},

['garden_pitcher'] = {
    label = 'Garden Pitcher',
    weight = 1,
    stack = true,
    close = true,
},

['garden_shovel'] = {
    label = 'Garden Shovel',
    weight = 1,
    stack = true,
    close = true,
},
```

{% endtab %}
{% endtabs %}


# Pickle Metal Detector

This is a multi-framework metal detector that goes great with police / security roleplay.

## What is it?

With this resource, you will be able to do the following:

* Scan players using a item.
* Scan players when they walk through a scanner.
* Restrict scanners & wands to groups.
* Detect specific items & weapons (weapons must be items in your inventory)
* Flashing lights, sounds, and text indicate whether metal was found on the person.

## Supported Frameworks

* ESX 1.1+ & Legacy (Inventory must have weapons as items)
* QBCore (Inventory must have weapons as items)
* Other (Code your own bridge)


# Installation

Read carefully to ensure you've done everything required.

## What do I need?

Use a supported framework or make it work with yours via the bridge folder.

[Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works with any server).

## Installation

:warning:Make sure you rename the folder from pickle\_metaldetector-main to pickle\_metaldetector prior to installing.:warning:

If you miss this step the script will not function as expected.

Navigate to the "\_INSTALL" folder.

Import the images in the \_INSTALL/images folder to your inventory image folder. (Varies on framework)

Run the SQL for ESX, or into the shared/items.lua for QB-Core.

{% tabs %}
{% tab title="qb-inventory" %}

```
["metal_wand"] 							= {["name"] = "metal_wand",  	     		    ["label"] = "Metal Wand",	 		    ["weight"] = 1, 		["type"] = "item", 		["image"] = "metal_wand.png", 				["unique"] = false, 	    ["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
```

{% endtab %}

{% tab title="ox\_inventory" %}

```
['metal_wand'] = {
    label = 'Metal Wand',
    weight = 1,
    stack = true,
    description = ""
},
```

{% endtab %}
{% endtabs %}


# Pickle Payments

This is a multi-framework payment system.

## Preview

{% embed url="<https://www.youtube.com/watch?v=hSvjYPHLr0U>" %}

## What is it?

It's a great fit for any type of roleplaying server, whether it's Serious RP or not.

With this resource, you will be able to do the following:

* Add Registers.
* Charge Customers via Cash / Card automatically.
* Itemize your charges with individual names and prices.
* Restrict Registers to multiple jobs.
* Payout to either businesses or the cashier themselves.

## Supported Frameworks

* ESX 1.1+ & Legacy
* QBCore
* Standalone (Code your own bridge)


# Installation

Read carefully to ensure you've done everything required.

## What do I need?

Use a supported framework or make it work with yours via the bridge folder.

[Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works with any server).

## Installation

:warning:Start ox\_lib before pickle\_payment.:warning:

Add your registers in the config.lua.


# Pickle Prisons

## Preview

{% embed url="<https://www.youtube.com/watch?v=flCTCk4hW7g>" %}

## What is it?

This is a one-size fits all solution for jail systems, with high quality features that have yet to be seen in a free prison script. It also has a lot of innovations, such as multiple prison support, which lets you send people to different prisons on the map (requires setup).

## Features

* Supports both non-target and target!
* Work & Activities (Kitchen, Cleaning, Workouts)
* Create your own Work & Activities in the config! (Config.Activities)
* Multiplayer Breakouts
* Multiple Prison Support
* Commands (/jail, /unjail, /jailstatus)
* Takes & Returns Items Before & After Jail
* Automatic Outfit Switcher
* Commisary & Prison Plug (Used for Contraband Trades)
* Collectable Items around the prison, with regen timer.
* Custom Jail Siren System (Works with .MP3)
* And more!


# Installation

## What do I need?

* ESX (1.1+) / QBCore, or code your own bridge to work with your framework. (the bridge is fully accessible!)
* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).

## Optional

Use my free XP system below, or port to another one inside of the bridge!

<https://forum.cfx.re/t/free-pickles-xp-system-standalone-works-with-esx-qb-multicharacter-identifiers/5088064>

## Installation

:warning:Make sure you rename the folder from pickle\_prisons-main to pickle\_prisons prior to installing.:warning:

If you miss this step the script will not function as expected.

Navigate to the "\_\_INSTALL" folder.

## Optional Metadata

***This is not required to use the script, however enables you to generate items with metadata using the .createItem function in the rewards.***

* QBCore
* Ox Inventory
* ESX (Only if your inventory provider allows metadata to be set through "xPlayer.addInventoryItem".

Navigate to the "\_INSTALL" folder.

Import the images in the \_INSTALL/images folder to your inventory image folder. (Varies on framework)

{% tabs %}
{% tab title="ESX Items" %}
Execute the SQL provided inside the \_\_INSTALL folder.
{% endtab %}

{% tab title="qb-inventory" %}

```lua
["wood"] 					= {["name"] = "wood",  	     		        ["label"] = "Wood",	 		    ["weight"] = 1, 		["type"] = "item", 		["image"] = "wood.png", 				["unique"] = false, 	    ["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["metal"] 					= {["name"] = "metal",  	     		    ["label"] = "Metal",	 		    ["weight"] = 1, 		["type"] = "item", 		["image"] = "metal.png", 				["unique"] = false, 	    ["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["rope"] 					= {["name"] = "rope",  	     		        ["label"] = "Rope",	 		    ["weight"] = 1, 		["type"] = "item", 		["image"] = "rope.png", 				["unique"] = false, 	    ["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
["shovel"] 					= {["name"] = "shovel",  	     		    ["label"] = "Shovel",	 		    ["weight"] = 1, 		["type"] = "item", 		["image"] = "shovel.png", 				["unique"] = false, 	    ["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
```

{% endtab %}

{% tab title="ox\_inventory" %}

```lua
['wood'] = {
    label = 'Wood',
    weight = 1,
    stack = true,
    close = true,
    description = nil
},

['metal'] = {
    label = 'Metal',
    weight = 1,
    stack = true,
    close = true,
    description = nil
},

['rope'] = {
    label = 'Rope',
    weight = 1,
    stack = true,
    close = true,
    description = nil
},

['shovel'] = {
    label = 'Shovel',
    weight = 1,
    stack = true,
    close = true,
    description = nil
},
```

{% endtab %}
{% endtabs %}


# Commands

These are the commands in this resource

#### /jailstatus \[opt: target]

This will return the jail time & location of any player by their server ID.

```
/jailstatus (returns your jail time & location)
/jailstatus 10 (returns ID #10's jail time & location)
```

#### /jail \[target] \[time] \[opt: jailName]

This will send the player to the jail you reference (or default), you must be allowed to in the config.

Examples:&#x20;

```
/jail 10 100 (jails ID #10 for 100 minutes at the default jail)
/jail 10 100 state (jails ID #10 for 100 minutes at the state's jail)
```

#### /unjail \[target]

This will unjail the player you reference, you must be allowed to in the config.

Examples:&#x20;

<pre><code><strong>/unjail 10 (unjails ID #10)
</strong></code></pre>


# Exports

This is the list of exports in this resource.

## Server

#### exports.pickle\_prisons:JailPlayer(source, time, (opt) prisonID)

<pre class="language-lua"><code class="lang-lua"><strong>local source = 10
</strong>local time = 10
local jailName = "default"
exports.pickle_prisons:JailPlayer(source, time, jailName)
</code></pre>

#### exports.pickle\_prisons:UnjailPlayer(source)

```lua
local source = 10
local time = 10
local jailName = "default"
exports.pickle_prisons:UnjailPlayer(source)
```


# Events

This is the list of events in this resource.

## Client

#### TriggerEvent("pickle\_prisons:jailDialog")

```lua
-- Opens a jail dialog that lets you select the prisoner, prison, and sentence.
TriggerEvent("pickle_prisons:jailDialog")
```

## Server

#### TriggerServerEvent("pickle\_prisons:jailPlayer", target, time, \[opt] jailName)

```lua
-- If you need a jail event in your F6 menu, this is it.
TriggerServerEvent("pickle_prisons:jailPlayer", target, time)
-- Sends to state prison.
TriggerServerEvent("pickle_prisons:jailPlayer", target, time, "state")
```

#### TriggerServerEvent("pickle\_prisons:jailPlayer", target)

```lua
-- If you need a unjail event in your F6 menu, this is it.
TriggerServerEvent("pickle_prisons:unjailPlayer", target)
```


# Snippets

This is the list of snippets in this resource.

If you need help incorperating this resource into scripts that prevent normal usage of this script, join the discord:

{% embed url="<https://discord.gg/picklemods>" %}


# Pickle Rentals

This is a multi-framework vehicle rental script, which is perfect for players who need transport without buying a new vehicle.

## Preview

{% embed url="<https://www.youtube.com/watch?v=g6bTAIcxOws>" %}

## What is it?

With this resource, you will be able to do the following:

* Rent vehicles at multiple locations.
* Rental License Plates for Rented Vehicles.
* Deposit System based on damage & rental time.
* Vehicle Previews for rented vehicles.
* And more!

## Supported Frameworks

* ESX 1.1+ & Legacy
* QBCore
* Standalone (Code your own bridge)


# Installation

Read carefully to ensure you've done everything required.

## What do I need?

Use a supported framework or make it work with yours via the bridge folder.

[Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works with any server).

## Installation

:warning:ensure ox\_lib before pickle\_rental in the config.:warning:

Edits are made in the config.lua.


# Pickle Slapboxing

This is a 1v1 minigame for Slap Boxing.

## Preview

{% embed url="<https://www.youtube.com/watch?v=Mgxt2qEZ13c>" %}

## What is it?

Slap Boxing is a sport that involves two opponents slapping each other's faces until one has tapped or knocked out.

With this resource, you will be able to do the following:

* Place Tables to allow matchups.
* Bet on opponents, with realistic wager payouts.
* Knock out opponents, and sometimes result in death.
* Spectators can watch with the scoreboard visible.
* And more!

## Supported Frameworks

* ESX 1.1+ & Legacy
* QBCore
* Standalone (Code your own bridge)


# Installation

Read carefully to ensure you've done everything required.

## What do I need?

Use a supported framework or make it work with yours via the bridge folder.

[Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works with any server).

## Installation

:warning:ensure ox\_lib before pickle\_slapboxing in the config.:warning:

Navigate to the "\_INSTALL" folder.

Import the images in the \_INSTALL/images folder to your inventory image folder. (Varies on framework)

Add the items to your SQL if using ESX, or into the shared/items.lua for QB-Core.

{% tabs %}
{% tab title="ESX Items" %}
Execute the SQL provided inside the \_\_INSTALL folder.
{% endtab %}

{% tab title="qb-inventory" %}

```lua
["slaptable"] 							= {["name"] = "slaptable",  	     		    ["label"] = "Slap Table",	 		    ["weight"] = 1, 		["type"] = "item", 		["image"] = "slaptable.png", 				["unique"] = true, 	    ["useable"] = true, 	["shouldClose"] = true,   	["combinable"] = nil,   ["description"] = ""},
```

{% endtab %}

{% tab title="ox\_inventory" %}

```lua
["slaptable"] = {
    label = 'Slap Table',
    weight = 1,
    stack = true,
    description = ""
}
```

{% endtab %}
{% endtabs %}


# Pickle Taxi Job

This is a multi-framework taxi job.

## Preview

{% embed url="<https://www.youtube.com/watch?v=SHyzr0GcOx8>" %}

## What is it?

It's a great fit for any type of roleplaying server, whether it's Serious RP or not.

With this resource, you will be able to do the following:

* Create multiple taxi businesses.
* Allow multiple groups to access and manage a business.
* Earn money through NPC missions.
* Spawn Vehicles at the depot.
* Go on/off duty.
* Manage the business.

## Supported Frameworks

* ESX 1.1+ & Legacy
* QBCore
* Standalone (Code your own bridge)


# Installation

Read carefully to ensure you've done everything required.

## What do I need?

Use a supported framework or make it work with yours via the bridge folder.

[Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works with any server).

## Installation

:warning:ensure ox\_lib before pickle\_taxijob in the config.:warning:

Edit the business in config.lua

Navigate to the "\_INSTALL" folder.

{% tabs %}
{% tab title="ESX" %}
Execute the SQL provided inside the \_\_INSTALL folder.
{% endtab %}

{% tab title="QBCore" %}
Add the provided job into your jobs.lua in your qbcore shared files.

```lua
['taxi'] = {
    label = 'Taxi Company',
    defaultDuty = true,
    offDutyPay = false,
    grades = {
        ['0'] = {
            name = 'Recruit',
            payment = 0
        },
        ['1'] = {
            name = 'Driver',
            payment = 0
        },
        ['2'] = {
            name = 'Lead Driver',
            payment = 0
        },
        ['3'] = {
            name = 'Owner',
            isboss = true, 
            bankAuth = true,
            payment = 0
        },
    },
},
```

{% endtab %}
{% endtabs %}


# Waypoints

This is a resource that allows you to view waypoints in-game, as well as send global & player waypoints as an admin!

It has customizable features; including blips, colors, and more!

## Preview

{% embed url="<https://www.youtube.com/watch?v=8tJOBXCHoTA>" %}

### What is this?

This is a resource that allows you to view waypoints in-game, as well as send global & player waypoints as an admin!

It has customizable features; including blips, colors, and more!

### Features

* Supports both ESX and QB, as well as standalone!
* View waypoints in-game
* Customize Waypoints using /waypointsettings
  * Colors
  * Enable / Disable
* Create multiple waypoints using exports!
* Send custom waypoints to all players, or target a specific player using /adminwaypoint.
* Use custom images for Admin Waypoints, or use the default icon.
* It's a free resource.
* And more!

You can get the resource for free here: <https://store.picklemods.com/>


# Installation

## Installation

Read carefully to ensure you've done everything required.

## Requirements

* You can use any framework, but ESX and QB are supported for job & group permissions.
* [Ox Lib](https://github.com/overextended/ox_lib/releases/) (Required, Works anywhere).

#### Installation <a href="#installation" id="installation"></a>

Ensure pickle\_waypoints inside your server.cfg. (I recommend putting all the Pickle scripts inside a folder such as \[pickle] and ensuring the folder. i.e. "ensure \[pickle]" )


# Exports

## Client-side:

```lua
-- AddWaypoint: Adds a waypoint to the player's view (client)  

local index = AddWaypoint(label, coords, {
    icon = "WAYPOINT_URL", -- or "default" to use internal icon for color support.
    color = {255, 255, 255, 255}, -- rgba value, used for internal icon and marker.
    clearEnter = true, -- Upon entering the area, remove the waypoint.
    blipId = 1, -- Display waypoint on map, or set to nil to disable.
    blipColor = 0, -- Blip color on the map.
})

-- RemoveWaypoint: Removes a waypoint from the player's view (client)

RemoveWaypoint(index)

-- GetWaypoint: Gets the updated information regarding the waypoint passed in index.

local waypointData = GetWaypoint(index)

-- UpdateWaypointCoords: Update the location of the waypoint.

UpdateWaypointCoords(index, vector3(100.0, 20.0, 30.0))

-- UpdateWaypointSettings: Update the waypoint's settings.

UpdateWaypointSettings(index, {
    icon = "WAYPOINT_URL", -- or "default" to use internal icon for color support.
    color = {255, 255, 255, 255}, -- rgba value, used for internal icon and marker.
})
```


