# Let's Cook Plus!

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

⚠️ All props are created server-side. If you are using any anti-cheat scripts, then please follow the instructions from your anti-cheat to whitelist these two events:

```
'xmmx_letscookplus:client:spawnProp' -- client-side
'xmmx_letscookplus:server:PlaceObject' -- server-side
```

This has been the common issue for those whose props disappear after placing them. Please know how your anti-cheat works, and be sure you include new resources to them to avoid uneccessary issues. ☺️

## ⚙️CONFIG.LUA

`xmmx_letscookplus` is an advanced FiveM cooking and crafting system built for high customization, immersive gameplay, and compatibility with multiple frameworks and inventory/target systems.

> ⚠️ **Important:**\
> Do **NOT** rename this resource — doing so will break its functionality!

### First Time Setup

#### `FirstInstall = true`

* **Purpose:** Must be `true` on **first install and launch** of the script. This will auto install the necessary databse tables.
* **After first boot:** Set to `false` and **leave it that way.**<br>

### Core Settings

| Option           | Description                                                                             |
| ---------------- | --------------------------------------------------------------------------------------- |
| `VersionChk`     | Enables version updates check.                                                          |
| `Debug`          | Enables verbose debug logging. Set `false` for production.                              |
| `Target`         | Target system: `"ox"`, `"qb"`, `"qt"`, `"interact"`.                                    |
| `Distance`       | Radius for target interaction.                                                          |
| `IntDistance`    | For `"interact"` system only.                                                           |
| `Inventory`      | Supported systems: `"ox"`, `"newQB"`, `"oldQB"`, `"qs"`, `"codem"`, `"core"`, `"ak47"`. |
| `Images`         | Path to inventory image assets.                                                         |
| `UseConsumables` | If `true`, crafted food items can be used.                                              |
| `DocumentItem`   | Name of the printer output item.                                                        |

### Menu Options

| Option       | Description                                                                                                |
| ------------ | ---------------------------------------------------------------------------------------------------------- |
| `Menu`       | UI type: `"ui"` (built-in), `"qb"`, `"ox"`, or `"xm"` ([xm\_menu](https://github.com/xMaddMackx/xm_menu)). |
| `MenuBlur`   | Enables screen blur during menu.                                                                           |
| `ToggleHud`  | Toggle player HUD while menu is open.                                                                      |
| `MenuTxt`    | Header text (optional).                                                                                    |
| `MenuScheme` | Primary theme color (hex, RGB, or name).                                                                   |
| `iconColor`  | Icon color for menus and target markers.                                                                   |
| `iconAnims`  | Animations for `ox` target icons.                                                                          |
| `qbImgSize`  | Image size for `qb-menu`.                                                                                  |

### Sound Configuration

| Option        | Description                                       |
| ------------- | ------------------------------------------------- |
| `SoundExport` | `"xsound"` or `"mx"` for audio playback.          |
| `MaxVol`      | Volume cap (for `mx-surround`).                   |
| `Panner`      | 3D sound behavior (HRTF, drop-off, angles, etc.). |

### MiniGame Configuration

| Option             | Description                        |
| ------------------ | ---------------------------------- |
| `mode`             | Mini-game mode (e.g., `"arrows"`). |
| `amount`           | Number of steps required.          |
| `time`             | Time limit.                        |
| `color1`, `color2` | Visual theme.                      |

### Prop Placement System

| Option         | Description                                                                                     |
| -------------- | ----------------------------------------------------------------------------------------------- |
| `SaveProps`    | Save props to DB so they persist across restarts/logins.                                        |
| `UseInstance`  | Save props in the current routing bucket (useful for apartments that use persistent instances). |
| `PlayerOption` | `"raycast"` mode is now the only mode used.                                                     |
| `PlaceType`    | No longer used!                                                                                 |
| `CastDist`     | Max raycast distance.                                                                           |
| `MoveSpeed`    | Prop height adjustment speed.                                                                   |
| `TextUI`       | `"ox"` or `"qb"` text UI display.                                                               |
| `RayCastKeys`  | Keybinds for rotating, placing, and canceling prop placement.                                   |

### Global Props

```lua
GlobalProps = {
  Stoves = { "prop_pizza_oven_01", "prop_cooker_03" },
  Grills = { "prop_bbq_1", "prop_bbq_2" },
  ...
}
```

Defines all interactable object **hashes** used for placement targeting.

### Item-Based Placeables

#### `ItemProps`

These items can be placed by players (like furniture or appliances). Each entry includes:

| Field    | Type     | Description                                      |
| -------- | -------- | ------------------------------------------------ |
| `label`  | `string` | UI label for the item.                           |
| `name`   | `string` | Item name used in inventory.                     |
| `model`  | `string` | World model to spawn.                            |
| `inside` | `bool`   | Whether the item can only be placed **indoors**. |

**Example:**

```lua
{ label = "Stove", name = "lc_stove", model = "prop_cooker_03", inside = false }
```

### Interior Settings

| Option         | Description                                                               |
| -------------- | ------------------------------------------------------------------------- |
| `InsideChecks` | If `true`, enforces "indoors only" placement for specific props.          |
| `AllRemove`    | If `true`, any player can remove a prop. If `false`, only the placer can. |

### Visual Feedback

| Option    | Description                                                  |
| --------- | ------------------------------------------------------------ |
| `notItem` | Prefix shown when a required item is **missing** (e.g., ❌).  |
| `hasItem` | Prefix shown when a required item is **present** (e.g., ✔️). |

### Integration Requirements

Make sure the following dependencies are started:

* `qb-core`, `es_extended`, or `qbx_core`
* `xmmx_bridge` (required)
* Supported inventory system (`ox`, `qb`, `qs`, etc.)
* Target system (`ox_target`, `qb-target`, etc.)
* Sound system (`xsound`, `mx-surround`)<br>

### Final Notes

* ⚠ **Never rename** this resource — it will not work if renamed.
* 🔄 Many features depend on external systems (`xmmx_bridge`, `ox_inventory`, `ox_target`, etc.).
* ✅ Fully supports **prop persistence**, **routing buckets**, and **interactive mini-games**.
* 🧩 Highly modular — built to extend or integrate into larger job or crafting systems.

***

## 🍔RECIPES.LUA

Here is a full **explanation** of the `recipes.lua` file found in the `configs` folder of the **`xmmx_letscookplus`** script:

### Recipe Configuration Guide

This configuration file defines **craftable recipes** used by **xmmx\_letscookplus**, organized into named menus that correspond to target zone labels (e.g., "Let's Cook!", "Let's Grill!", etc.).

Each menu can contain multiple recipes, each specifying:

* An **output item**
* A **list of ingredients**
* An **amount** produced when crafted

### General Behavior

* Each **menu header** (e.g., `"Let's Cook!"`) corresponds to an in-game crafting station or interaction zone.
* Each **recipe** is a key-value pair where:
  * The **key** is the item being crafted.
  * The **value** is a table of **ingredients** and their quantities.
  * A separate `"amount"` field defines how many of the result item are given.

**Custom UI Limitation:**

* Max 5 **ingredients per recipe** (to avoid layout issues) when using the built in UI.
* Displays **5 recipes per row** in the built in UI crafting menu.

### Menu Structure Example

```lua
["Let's Cook!"] = {
  { ["lclemonlobster"] = { ["lclobstertails"] = 1, ["lcbutter"] = 1, ["lclemon"] = 1 }, ["amount"] = 2 },
}
```

* **Menu Name:** `"Let's Cook!"`
* **Crafts:** `lclemonlobster`
* **Ingredients:**
  * `lclobstertails` ×1
  * `lcbutter` ×1
  * `lclemon` ×1
* **Result:** `lclemonlobster` ×2

### Menu Categories Breakdown

#### 🧑‍🍳 `"Let's Cook!"`

Core meals like burgers, gumbo, curries, and seafood.

#### 🔁 `"Let's Microwave!"`

Quick meals made with microwaveable components.

#### 🍹 `"Let's Juice!"`

Fruit juices and smoothies.

#### ☕ `"Let's Brew!"`

Coffees, teas, and hot drinks.

#### 🔥 `"Let's Grill!"`

Barbecue-style meals: ribs, chicken, steak, etc.

#### 🍞 `"Let's Toast!"`

Toaster-friendly foods: toast, waffles, poptarts.

#### 🍳 `"Let's Fry!"`

Fried items: chicken, fries, cheese sticks.

#### 🍖 `"Let's Griddle!"`

Flat-surface grilled items and stir fry dishes.

#### 🧂 `"Let's Process!"`

Food processed with processors: creams, sauces, and puddings.

#### 🥃 `"Let's Moonshine!"`

Mash-based distilling and moonshine drinks (advanced crafting).

#### 🥫 `"Let's Hobo!"`

Simple meals with canned food and basic items.

#### 🔧 `"Let's Craft!"`

Tool/equipment crafting (like `advancedlockpick`).

> ⚠️ You must configure your own **usable items** and **inventory entries** for these.

#### 💊 `"Let's Drug!"`

Drug processing recipes (e.g., converting raw `coke` to `cokebaggy`).

> ⚠️ Intended for servers with custom drug systems. **Configure responsibly.**

### Advanced Notes

* The `"amount"` value can be static or dynamic:

  ```lua
  ["amount"] = math.random(20, 30)
  ```
* Recipes can be shared across menus (e.g., `lccheeseburger` in `"Let's Grill!"` and `"Let's Cook!"`).
* Ensure item names match those defined in your **inventory system**.

### Adding Custom Recipes

1. Choose or create a new menu (e.g., `"Let's Bake!"`)
2. Add new recipe entry:

```lua
["Let's Bake!"] = {
  { ["lccookies"] = { ["lcflour"] = 1, ["lcsugar"] = 1, ["lcchocchip"] = 1 }, ["amount"] = 4 },
}
```

### Important Constraints

* Each **menu name** must match the `label` property in your **target zones** or interaction setup.
* **Do not exceed 5 ingredients** per recipe or the UI might break visually depending on screen resolution.

***

## 🔧SETTINGS.LUA

Here’s a comprehensive **guide** for the `settings.lua` configuration file found in the `configs` folder of the `xmmx_letscookplus` script:

### Animation & Interaction Configuration

This configuration file controls all **animations**, **progress behavior**, **minigame usage**, **visual effects**, and **prop setup logic** used during crafting and cooking interactions.

Each section represents a **prop interaction type**, such as `Grill`, `Stove`, `Still`, etc., and defines how that prop behaves when used.<br>

### General Explanation

Each table entry (e.g., `Grill`, `Stove`) defines:

| Property | Description                                                                         |
| -------- | ----------------------------------------------------------------------------------- |
| `Dict`   | Animation dictionary.                                                               |
| `Clip`   | Animation clip.                                                                     |
| `Flag`   | Animation flag (e.g., loop, upper-body only, etc.).                                 |
| `Time`   | Duration in milliseconds.                                                           |
| `Prop`   | Optional prop to attach during animation (e.g., tool).                              |
| `Bone`   | Bone ID to attach prop to (usually `28422` for right hand).                         |
| `Coord`  | Vector3 offset for prop position.                                                   |
| `Rot`    | Vector3 rotation for the prop.                                                      |
| `Prog`   | Progress bar label (e.g., "Cooking ").                                              |
| `Move`   | If `true`, disables movement while interacting.                                     |
| `MiniG`  | Enables minigame during interaction.                                                |
| `Effect` | Optional consequence if minigame fails (`false`, `"Fire"`, `"Explode"`, `"Shock"`). |
| `Alert`  | Optional dispatch alert ID to trigger police notification.                          |

### Minigame & Effects

#### `MiniG`

* Enables the skill mini-game when set to `true`.
* Works with interaction types like `Drugs`, `Crafting`, etc.

#### `Effect` Options

| Value       | Behavior                                     |
| ----------- | -------------------------------------------- |
| `false`     | No effect on failure.                        |
| `"Fire"`    | 50% chance to damage the player (\~20% HP).  |
| `"Explode"` | 30% chance to kill player.                   |
| `"Shock"`   | Could be configured to stun (custom effect). |

### Example: ProgressBar Setup with Optional Prop

```lua
Grill = {
  Dict = "amb@prop_human_bbq@male@idle_a",
  Clip = "idle_b",
  Flag = 49,
  Time = 5000,
  Prop = "prop_fish_slice_01",
  Bone = 28422,
  Coord = vec3(0.0, 0.0, 0.0),
  Rot = vec3(0.0, 0.0, 0.0),
  Prog = "Grilling ",
  Move = true,
  MiniG = false,
  Effect = "false",
  Alert = false
}
```

### Configuration Sections Breakdown

#### 📦 `PropPlace` / `PropRemove`

Controls how players **place** and **remove** props. Includes animations and optional props.

#### 🧍 `MiniGameAnim`

Defines the idle animation shown when a mini-game is active.

### Cooking/Interaction Types

| Type         | Description                                             |
| ------------ | ------------------------------------------------------- |
| `Grill`      | BBQ style cooking.                                      |
| `Stove`      | Stove top cooking (includes `"Fire"` effect).           |
| `Still`      | Distilling/Moonshine (includes dispatch alert).         |
| `Microwave`  | Quick heating (includes `"Shock"` effect).              |
| `Juicer`     | Makes juices and smoothies.                             |
| `Brewer`     | Coffee/tea preparation.                                 |
| `Toaster`    | Toasts bread-type items.                                |
| `Fryer`      | Deep frying (with `"Fire"` effect).                     |
| `Griddle`    | Surface cooking with flat pans.                         |
| `Processor`  | Processes raw food into sauces/creams/etc.              |
| `HoboStove`  | Simple outdoor cooking with risk of fire.               |
| `Crafting`   | Used for tools/crafting benches (dispatch alert = 3).   |
| `Drugs`      | Drug mixing (minigame enabled, fire effect, alert = 2). |
| `GroceryBag` | Unpacks groceries — cosmetic only.                      |

### Dispatch Alerts (Optional)

Each section can optionally trigger a **police dispatch alert** by setting the `Alert` value to a **numeric identifier**. You must configure this behavior in:

> `configs/functions.lua`

Set `Alert = false` to disable dispatch for that interaction.

### Tips for Customization

* To add a new interaction type:
  * Copy any existing section (e.g., `Grill`).
  * Rename it and adjust the animation, prop, and label.
* Set `MiniG = true` and `Effect = "Explode"` for high-risk crafting.
* Leave `Prop`, `Bone`, `Coord`, and `Rot` as `nil` if no prop is used.

### Summary

This file gives you **full control** over how each crafting or cooking type looks and feels in-game, down to:

* Animation
* Props
* Risk effects
* Progress behavior
* Optional minigames

***

## 🛒SHOPS.LUA

Here’s a full **breakdown** of the `shops.lua` configuration file in the `configs` folder for **`xmmx_letscookplus`**.

### Shop System Configuration

This configuration handles the **in-game shop(s)** where players can buy ingredients, appliances, tools, and crafting items for use with the cooking system. It supports **multiple shop locations**, NPC vendors, categorized menus, and optional blips.<br>

### Global Toggle

```lua
Enabled = true
```

Enables or disables the **entire shop system**.<br>

### Shop NPCs (`Peds`)

```lua
Peds = {
  { model = "mp_m_waremech_01", scenario = "WORLD_HUMAN_LEANING", coords = vector3(...), heading = ..., blip = true },
}
```

Each entry defines:

| Key        | Description                                          |
| ---------- | ---------------------------------------------------- |
| `model`    | Ped model used as the shopkeeper.                    |
| `scenario` | Animation or behavior (e.g., `WORLD_HUMAN_LEANING`). |
| `coords`   | Location of the NPC.                                 |
| `heading`  | NPC facing direction.                                |
| `blip`     | Enables/disables map blip for this location.         |

> ✅ Multiple shopkeepers at different locations are supported.

### Map Blips (`Blips`)

```lua
Blips = {
  Enabled = true,
  Label   = "Let's Cook! Shop",
  Sprite  = 59,
  Display = 6,
  Scale   = 0.6,
  Color   = 47,
}
```

| Key       | Description                          |
| --------- | ------------------------------------ |
| `Enabled` | Enables/disables map blips globally. |
| `Label`   | Name shown on the map.               |
| `Sprite`  | Blip icon (e.g., 59 = food icon).    |
| `Display` | HUD style (6 = always visible).      |
| `Scale`   | Blip size.                           |
| `Color`   | Blip color (e.g., 47 = dark green).  |

### Grocery Bags

```lua
GroceryAmt = math.random(1, 5)
```

When a player uses a **grocery bag** item, this determines how many **of each item** is randomly granted from its contents.<br>

### Categories

Items are grouped into specific categories to organize the in-game shop UI. These **must not be renamed**:

```
"General", "Fruit", "Dairy", "Produce", "Meats",
"Grocery", "Electronics", "Appliance", "Furniture", "Materials"
```

They appear in this exact order in the UI.<br>

### Items List

Each item entry follows this format:

```lua
{ name = 'itemname', cost = 5, category = 'General' }
```

| Field      | Description                                   |
| ---------- | --------------------------------------------- |
| `name`     | Item name (must match your inventory system). |
| `cost`     | Price in dollars.                             |
| `category` | One of the predefined categories.             |

> 🧠 Item images must exist in:\
> `html/build/images/` (for UI icons)

#### 🔎 Item Types Overview

**📦 General**

Microwavables, base condiments, water, sugar, tea bags, etc.

**🍎 Fruit**

All kinds of fruits and berries (for juices, baking, etc.).

**🥛 Dairy**

Milk, butter, cheese, pudding, etc.

**🥬 Produce**

Vegetables, canned goods, rice.

**🥩 Meats**

Raw proteins for grilling, frying, and gourmet dishes.

**🛍️ Grocery**

Pre-packed grocery bag items (`grocerya`, `groceryb`, etc.).

**🖥️ Electronics**

Appliances that can be placed in the world.

**🔧 Appliance**

Craftable devices like grill, juicer, toaster, etc.

**🛋️ Furniture**

Larger props like tables, stills, benches, and seating.

**🧰 Materials**

Used for crafting and processing (e.g., `baking_soda`, `shinekit`).<br>

### &#x20;Add New Items

To add a new shop item:

1. Make sure the item is defined in your inventory.
2. Add an icon image to `html/build/images/`.
3. Add an entry like:

```lua
{ name = 'lcchocolatebar', cost = 3, category = 'General' }
```

### Summary

The shop system is fully customizable and supports:

* Multiple shops across the map
* Smart categorization for UI clarity
* Appliance and material sales
* Grocery bag support with randomization

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://xmmx-development.gitbook.io/documentation/product-guides/lets-cook-plus.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
