# Config

## FRKN Boosting — Configuration Documentation (EN)

This guide explains **every key** in your `FRKN` configuration for the FRKN Boosting script. It’s written to be copy-paste friendly and practical for server owners.

***

### 0) Quick Start

1. **Pick interaction system**: Target is automatically matched.
2. **Set language**: `language = 'en' | 'fr'`.
3. **Choose phone app**: `Phone = 'qb' | 'qs' | 'lb'` and ensure the chosen phone is installed.
4. **Hook your dispatch**: set `dispatchName` and update `sendAlert`.
5. **Check items**: make sure `boosting_tablet`, `gps_hacking_device` and all **reward/loot item names** exist in your inventory (QB/OX).
6. **Place locations**: verify spawn, drop-off, chop shop, and crusher coordinates match your map.
7. **Vehicles**: tune the `boostingVehicles` list to your economy and progression.

***

### 1) Core

#### `Target`

* **Type:** string — `'ox_target' | 'qb-target' | 'interact'`
* **Purpose:** Selects your interaction framework.

#### `language`

* **Type:** string — `'en' | 'fr'`
* **Purpose:** Localization key.

#### `debug`

* **Type:** boolean
* **Purpose:** Enables debug prints/logging.

***

### 2) Gameplay & Timers

#### `gpsHack`

* **Type:** number
* **Default:** `3`
* **Meaning:** Number of **successful minigames** required to remove the GPS tracker device from a vehicle.

#### `policeNeedToStart`

* **Type:** number
* **Default:** `1`
* **Meaning:** Minimum **on-duty police count** required to start a boosting contract.

#### `cooldown`

* **Type:** number (minutes)
* **Meaning:** Global cooldown between **starting** new contracts for a player.

#### `contractTimer`

```lua
contractTimer = {
  A = 30,  -- minutes
  B = 30,  -- minutes
  C = 10,  -- minutes
  D = 30,  -- minutes
}
```

* **Type:** table of minutes
* **Meaning:** **Maximum time limit** to complete each contract class.

***

### 3) Security NPCs

```lua
guardNpc = {
  B = { weapons = {"WEAPON_BAT", "WEAPON_KNIFE"}, guardAmount = 2 },
  C = { weapons = {"WEAPON_APPISTOL", "WEAPON_PISTOL"}, guardAmount = 3 },
}
```

* **Per class overrides** for guards:
  * `weapons`: array of weapon names (hash keys).
  * `guardAmount`: number of guards to spawn.
* If a class is **omitted**, no guards are spawned for that class.

***

### 4) Dispatch Integration

#### `dispatchName`

* **Type:** string — `"ps"` or `"other"`
* **Meaning:** Which dispatch to use.

#### `sendAlert(vehicle)`

* **Type:** function
* **Default behavior:**
  * If `dispatchName == "ps"` → calls `exports['ps-dispatch']:CarBoosting(vehicle)`
  * Else → no-op (add your custom dispatch trigger here)
* **How to extend:** Replace the **else** block with your dispatch export/event.

***

### 5) Car Crusher Mapping

```lua
carCrusher = {
  main = {
    model = "qua_carcrusher_main",
    position = { x=2393.164, y=3108.682, z=47.254 },
    rotation = { x=0.0, y=0.0, z=0.0 }
  },
  door = {
    model = "qua_carcrusher_door",
    position = { x=2392.051, y=3110.274, z=47.190 },
    rotation = { x=-100.712, y=0.0, z=0.0 }
  }
}
```

* **Purpose:** World placement for the crusher and its door.
* **Note:** Keep models consistent with your map resource.

***

### 6) In-Game Shop

```lua
shopItems = {
  { id=1, name="Boosting Tablet",    itemName="boosting_tablet",    price=5    },
  { id=2, name="GPS Hacking Device", itemName="gps_hacking_device", price=1000 },
}
```

* **Fields:**
  * `id`: unique integer
  * `name`: display title
  * `itemName`: inventory item key (must exist)
  * `price`: **Script-defined semantics** (token/currency).
    * In your config, **Boosting Tablet** comment indicates this price may represent **“races” tokens** to be removed/consumed.
    * For the GPS device, it likely represents **money**. Keep it consistent with your economy logic.

***

### 7) Crusher Stash Rewards

```lua
carCrusherStashReward = {
  water = 5,
}
```

* **Meaning:** Items granted after using the car crusher.
* **Format:** `{ [itemName] = quantity }`
* **Ensure:** All item names exist in your inventory system.

***

### 8) Chop Shop

* `chopShopProgressBarTime = 5`
  * **Type:** seconds
  * **Meaning:** Duration of chop-shop progress bar.
* `chopShopCoords = vector3(2342.2974, 3052.9194, 48.1518)`
  * **Meaning:** Main chop shop location.
* `chopShopProcess = vector3(2336.9192, 3050.2510, 48.1517)`
  * **Meaning:** Interaction/processing spot.
* `chopShopReward = { "metalscrap","plastic","copper","iron","aluminum","steel","glass" }`
  * **Meaning:** Reward pool for chop actions (actual drops/amounts handled by script logic).

***

### 9) Spawn & Delivery Points

#### Trailer Spawn

```lua
trailerSpawnCoords = {
  vector4(-143.8413, -2503.8540, 6.0068, 235.5382),
  vector4(-328.0348, -2582.9583, 6.0002, 132.7928),
}
```

* **Type:** `vector4(x,y,z,heading)`
* **Meaning:** Where trailers may appear.

#### Drop-Off Points

```lua
dropoffCoords = {
  vector3(  34.1527, -2659.8457,  6.0061),
  vector3(1543.2861,  2185.6106, 78.8086),
  vector3( 383.1602,  3588.7712, 33.2922),
  vector3(-115.8635,  6570.8242, 29.5221),
}
```

#### Vehicle Spawn Points

```lua
vehicleSpawnCoords = {
  vector4(337.3835, 2618.7581, 44.4989,  18.9221),
  vector4(355.3642, 2625.6514, 44.4971,  25.3254),
  vector4(571.1979, 2735.5776, 42.0601, 171.8936),
  -- ... (full list from your config)
  vector4(-209.4793, -2019.1289, 27.6204, 63.2876),
}
```

* **Tip:** Keep these points free of props and with clear road access.

***

### 10) Progression & Generation

#### `eachLevelMaxReputation`

* **Type:** number
* **Meaning:** Reputation required per **level** (script-specific leveling uses this as a threshold).

#### `contractGenerator`

* **Type:** number (minutes)
* **Meaning:** Interval to **delete old** and **generate new** contracts for the player.
* **Note:** Your sample value `60` implies 60 minutes. Keep comments aligned with actual units you use in code.

***

### 11) Phone Integration

#### `Phone`

* **Type:** string — `'qb' | 'qs' | 'lb'`
* **Meaning:** Which phone resource to use for notifications/mail.

#### `sendMail(message)`

* **Type:** function
* **Behavior:**
  * `'qb'`: triggers `qb-phone:server:sendNewMail`
  * `'qs'`: triggers `qs-smartphone:server:sendNewMail`
  * `'lb'`: calls a custom server event to send via **lb-phone**
  * Else: no-op (add your phone integration)
* **Action:** If you use a different phone, implement its mail export/event in the **else** branch.

### 12) Vehicle Catalog (Contracts)

```lua
boostingVehicles = {
  { class="A", car="italirsx",  model="Grotti Itali RSX",    reputation=120, races=10 },
  { class="B", car="dominator3",model="Vapid Dominator GTX", reputation=90,  races=7  },
  { class="C", car="comet5",    model="Pfister Comet SR",    reputation=80,  races=5  },
  { class="D", car="brioso",    model="Grotti Brioso R/A",   reputation=60,  races=3  },
  -- ... (full list from your config)
  { class="D", car="dilettante",model="Karin Dilettante",     reputation=45,  races=3  },
}
```

* **Fields:**
  * `class`: Contract class (`A`, `B`, `C`, `D`).
  * `car`: **spawn name** (GTA model key).
  * `model`: Display label for UI/logs.
  * `reputation`: **Rep requirement** or value tied to progression (script-specific).
  * `races`: Token **cost/weight** used by the economy (higher class ⇒ higher value).
* **Add new vehicle:** Append a new table with the same fields. Ensure the car spawn name exists in your game build.

***

### 13) Minigames

```lua
MinigameConfig = {
  riddleGame = function(cb)
    exports['frkn-riddlegame']:riddleGame(cb, 25, 'Destroy target', 'Destroy target', 2, 2)
  end,
  sosGame = function(cb)
    exports['frkn-sosgame']:xoxGame(cb, 25, 'Destroy target', 'Destroy target', 2, 2)
  end,
  stickGame = function(cb)
    exports['frkn-stickgame']:stickGame(cb, 25, 'Destroy target', 'Destroy target', 5, 1.0)
  end,
}
```

* **Signature:** Each function receives a `callback` (cb) and calls the respective exported minigame.
* **Common params:**
  * `25`: Duration/timeout (seconds).
  * Text parameters: UI headers/prompts.
  * Last numbers: difficulty/rounds/speed depending on the game.
* **Swap a minigame:** Replace the export call with your own minigame resource and keep the same `callback` contract.

***

### 14) Economy & Balance Tips

* **Tokens vs. Money:**\
  If your server uses **“races”** as a token economy (as your comments imply), keep:
  * Higher-class vehicles with higher `races`.
  * Shop prices consistent, e.g. **Boosting Tablet** costs token(s), GPS device costs money.
* **Reputation curve:**
  * Use `eachLevelMaxReputation` to control level pacing.
  * Keep `reputation` of A-class entries above lower classes to enforce progression.
* **Timers:**
  * `contractTimer` too short ⇒ more fails; too long ⇒ trivializes risk.
  * `cooldown` controls contract spam—tune with your player count.

***

### 15) Extending the Config

#### Add a new shop item

```lua
table.insert(FRKN.shopItems, {
  id = 3,
  name = "Signal Jammer",
  itemName = "signal_jammer",
  price = 2500, -- your economy
})
```

#### Add guards for a class not covered

```lua
FRKN.guardNpc.A = { weapons = {"WEAPON_PISTOL"}, guardAmount = 2 }
```

#### Add a new vehicle

```lua
table.insert(FRKN.boostingVehicles, {
  class = "B",
  car   = "sultan",
  model = "Karin Sultan",
  reputation = 90,
  races = 6,
})
```

#### Plug in a different dispatch

```lua
FRKN.dispatchName = "other"
FRKN.sendAlert = function(vehicle)
  exports['your-dispatch']:SendBoostingAlert(vehicle)
end
```

#### Plug in a different phone

```lua
FRKN.Phone = "other"
FRKN.sendMail = function(message)
  exports['your-phone']:SendMail({ sender="Boosting", subject="Boosting Contract", message=message })
end
```

### 16) Dependencies Checklist

* Target system chosen in `Target` is installed and started.
* Inventory contains **all** item names used in:
  * `shopItems`, `carCrusherStashReward`, `chopShopReward`.
* Phone app (`qb-phone`, `qs-smartphone`, or `lb-phone`) matches `Phone`.
* Minigame resources:
  * `frkn-riddlegame`, `frkn-sosgame`, `frkn-stickgame` (or your replacements).
* Mapping/models for the **car crusher** are present and streamed.
* Dispatch resource if using `ps-dispatch` or your custom one.

***

### 17) Troubleshooting

* **No interaction prompts:** Check `Target` value and the resource is running.
* **No mail sent:** Verify `Phone` setting and that the chosen phone’s server events/exports exist.
* **No guards spawning:** Ensure class key exists under `guardNpc` and weapon names are correct.
* **Items not awarded:** Confirm item names exist in your inventory system exactly (case-sensitive).
* **Contracts not refreshing:** Verify `contractGenerator` unit (minutes) matches how the server code consumes it.


---

# 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://docs.0resmon.org/0resmon/frkn-resources/frkn-boosting/config.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.
