> ## Documentation Index
> Fetch the complete documentation index at: https://docs.projectx.gg/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration

> Full reference for all configuration options in the TStudio Ammunation Robbery resource

## config/config.lua

### Main Settings

<ParamField path="debug" type="boolean" default="false">
  Shows polyzones created inside the game. Useful for testing zone placement.
</ParamField>

<ParamField path="TestingMode" type="boolean" default="false">
  Disables all minigames. Useful for testing the full robbery flow without completing minigame challenges.
</ParamField>

<ParamField path="DrawtextButton" type="number" default="38">
  The key code used to trigger drawtext interactions. `38` is `[E]` by default.
</ParamField>

<ParamField path="DrawTextZoneSize" type="vector3" default="vec3(0.8, 0.8, 2)">
  The size of the drawtext interaction zone.
</ParamField>

<ParamField path="DrawTextRotation" type="number" default="70.0">
  The default rotation of the drawtext interaction zone. Individual stores can override this in `Config.Stores`.
</ParamField>

<ParamField path="SpawnNetworkedPropsServerSide" type="boolean" default="true">
  Spawns networked props server side. Set to `false` to spawn them client side instead.
</ParamField>

<ParamField path="SpawnNetworkedPedsServerSide" type="boolean" default="true">
  Spawns networked peds server side. Set to `false` to spawn them client side instead.
</ParamField>

<ParamField path="RequireBag" type="boolean" default="true">
  Requires players to have a `bag` item in order to loot crates.
</ParamField>

<ParamField path="MinimumPolice" type="number" default="0">
  Minimum number of police required online before a robbery can be started. Set to `0` to disable.
</ParamField>

<ParamField path="PoliceJobs" type="table" default="{&#x22;police&#x22;}">
  The jobs that count as police for the `MinimumPolice` check and dispatch alerts.
</ParamField>

<ParamField path="RequiredPlayersNearby" type="table">
  Requires a minimum number of players nearby to start a robbery. Set `amount` to `0` or `false` to disable.
</ParamField>

<ParamField path="TotalActiveRobberies" type="number" default="0">
  Maximum number of Ammunation robberies that can be active at the same time. Set to `0` to disable.
</ParamField>

<ParamField path="DisableLoudApproach" type="boolean" default="false">
  Disables the loud approach path entirely.
</ParamField>

<ParamField path="DisableSilentApproach" type="boolean" default="false">
  Disables the silent approach path entirely.
</ParamField>

<ParamField path="DisableParticles" type="boolean" default="false">
  Disables all particle effects during robberies.
</ParamField>

<ParamField path="DisableRemovingWeapons" type="boolean" default="false">
  Disables weapon removal during robberies. Only enable this if you use a weapon wheel resource.
</ParamField>

***

### Cooldowns & Limits

<ParamField path="Cooldown.Global" type="boolean" default="true">
  When `true`, robbing one location puts all Ammunation locations on cooldown. When `false`, each location has its own cooldown.
</ParamField>

<ParamField path="Cooldown.Timer" type="number" default="180">
  Cooldown duration in minutes.
</ParamField>

<ParamField path="Cooldown.PlayerCooldown" type="number" default="0">
  Per-player cooldown in minutes after completing a robbery. Set to `0` to disable.
</ParamField>

<ParamField path="Limits.TotalRobberiesPerRestart" type="table">
  Maximum robberies per server restart, split by location type. Set each value to `0` to disable.
</ParamField>

<ParamField path="Limits.RobberiesPerPlayer" type="table">
  Maximum robberies a single player can complete per restart, split by location type. Set each value to `0` to disable.
</ParamField>

***

### Skill System

<ParamField path="SkillSystem" type="boolean" default="false">
  Requires players to meet a minimum level from an integrated XP/skill system before starting a robbery.
</ParamField>

<ParamField path="MinimumLevel" type="number" default="10">
  Minimum level required to initiate a robbery. Only applies when `SkillSystem` is `true`.
</ParamField>

***

### Dispatch

<ParamField path="Dispatch.Title" type="string" default="&#x22;Ammunation Robbery&#x22;">
  Title shown in the dispatch alert.
</ParamField>

<ParamField path="Dispatch.Message" type="string" default="&#x22;Ammunation is being robbed&#x22;">
  Message body shown in the dispatch alert.
</ParamField>

<ParamField path="DispatchLocation" type="table">
  Controls which steps trigger dispatch alerts. The TStudio variant includes fingerprint and keypad steps.

  ```lua theme={null}
  DispatchLocation = {
      ["Loud"] = true,
      ["Silent"] = false,
      ["Register"] = false,
      ["Keypad"] = true,
      ["Fingerprint"] = false,
      ["ElectricBox"] = false,
      ["FingerprintKeypad2"] = false,
  }
  ```
</ParamField>

***

### Bonus Items

<ParamField path="Bonus.Status" type="boolean" default="false">
  Enables or disables bonus item drops at the end of a robbery.
</ParamField>

<ParamField path="Bonus.Items" type="table">
  Table of possible bonus items with `Name`, `Chance` (%), and `Amount` range.
</ParamField>

***

### Evidence & Stress

<ParamField path="Evidence.Status" type="boolean" default="true">
  Enables fingerprint evidence drops at the crime scene.
</ParamField>

<ParamField path="Stress.Status" type="boolean" default="true">
  Enables the stress system. Stress is only applied when a minigame is failed.
</ParamField>

***

### Required Items

<ParamField path="Items" type="table">
  Maps logical item names to your inventory item names.

  ```lua theme={null}
  Items = {
      ["TrojanUSB"] = "x_trojanusb",
      ["TrojanUSB2"] = "x_trojanusb2",
      ["Circuit"] = "x_circuittester",
      ["Stethoscope"] = "x_stethoscope",
      ["FingerprintBag"] = "x_fingerprintbag",
      ["FingerprintTape"] = "x_fingerprinttape",
      ["Tablet"] = "x_cyberdeck",
      ["Lockpick"] = "advancedlockpick",
      ["Bag"] = "bag",
      ["Keycard"] = "ammunation_keycard",
  }
  ```
</ParamField>

***

### Rewards

Register and crate loot are configured per location type in `Config.RegisterGunStores`, `Config.RegisterShootingRanges`, and `Config.Loot`.

Gun crate prop models and their matching weapon rewards are configured in `Config.Props`.

***

### Store Locations

Enable or disable location types and individual stores using:

* `Config.ShootingRanges`
* `Config.GunStores`
* `Config.Stores`

Use the store key when calling exports.

***

### Other Settings

<ParamField path="Password" type="table">
  Controls the safe code range and UI text for safe interactions.

  ```lua theme={null}
  Password = {
      Input = {Title = 'Safe Code', Label = 'Code', Description = 'Enter the code', Icon = 'fas fa-lock'},
      CodeRange = {min = 1000, max = 9999},
  }
  ```
</ParamField>

<ParamField path="Config.Weapons" type="table">
  Weapons allowed for threatening the employee during the loud approach.
</ParamField>

<ParamField path="Config.DoorList" type="table">
  Door lock definitions for each location.
</ParamField>

**Step durations** (`FuseboxDuration`, `RegisterDuration`, `ComputerDuration`, etc.) control progress bar length for each interaction.

***

### Logs

Configured in `config/logs.lua`.

<ParamField path="Enable" type="boolean" default="false">
  Enables or disables the logging system.
</ParamField>

<ParamField path="APIKey" type="string" default="&#x22;&#x22;">
  Your Discord webhook URL, or your Fivemerr/Fivemanage API key.
</ParamField>
