<script>
	import Callout from '$lib/components/Callout.svelte';
</script>

`config/client.lua` returns one table. Everything in it affects what the player sees and touches in
the world.

## Fabric

The print works, where players buy materials, design a card and collect a finished order. All three
interactions are attached to every fabric ped, so you can add as many locations as you like and they
all behave identically.

```lua
Fabric = {
    {
        coords = vec4(-117.02, -604.77, 35.28, 250.94),
        pedModel = 'a_m_m_business_01',
        scenario = 'WORLD_HUMAN_CLIPBOARD',
        blip = {
            sprite = 408,
            colour = 0,
            scale = 0.7,
            label = 'Business Card Fabric',
        },
    },
},
```

| Key        | Type      | Default                                 | Notes                                                                 |
| ---------- | --------- | ------------------------------------------ | ------------------------------------------------------------------------ |
| `coords`   | `vector4` | `vec4(-117.02, -604.77, 35.28, 250.94)` | Ped position, plus the heading it faces in `w`                        |
| `pedModel` | `string`  | `'a_m_m_business_01'`                   | Any valid ped model                                                   |
| `scenario` | `string?` | `'WORLD_HUMAN_CLIPBOARD'`               | Idle animation looped forever; `nil` for a ped that just stands still |
| `blip`     | `table?`  | see above                               | Set the **whole table** to `nil` to keep the location off the map     |

**Getting the heading right.** Stand where you want the ped and read your own coords off a coord
tool. The heading is usually your heading turned 180 degrees, so the ped looks back at you.

**Blip fields.** `sprite` and `colour` are ids from FiveM's blip reference; `scale` is `1.0` for the
game default (`0.7` reads slightly smaller than normal); `label` is the name shown in the map legend.

Reference lists:
[ped models](https://docs.fivem.net/docs/game-references/ped-models/) ·
[ped scenarios](https://docs.fivem.net/docs/game-references/ped-scenarios/) ·
[blips](https://docs.fivem.net/docs/game-references/blips/)

### Adding a second location

Add another entry to the array. Nothing else needs changing — the interaction, menu and pickup are
attached per-ped.

```lua
Fabric = {
    {
        coords = vec4(-117.02, -604.77, 35.28, 250.94),
        pedModel = 'a_m_m_business_01',
        scenario = 'WORLD_HUMAN_CLIPBOARD',
        blip = { sprite = 408, colour = 0, scale = 0.7, label = 'Business Card Fabric' },
    },
    {
        coords = vec4(1173.45, 2705.12, 38.09, 175.0),
        pedModel = 'a_m_y_business_02',
        scenario = 'WORLD_HUMAN_CLIPBOARD',
        blip = nil, -- unlisted: players have to find this one
    },
}
```

## Interaction

How players interact with a fabric ped.

```lua
Interaction = 'ox_lib',
```

| Value           | Behaviour                                                                                            |
| ---------------- | -------------------------------------------------------------------------------------------------------- |
| `'auto'`        | Whichever targeting resource is started, preferring ox_target; falls back to `'ox_lib'`              |
| `'ox_target'`   | Third-eye targeting through ox_target                                                                |
| `'qb-target'`   | Third-eye targeting through qb-target                                                                |
| `'ox_lib'`      | No targeting resource — an ox_lib textUI prompt appears as you walk up, and a key opens the menu     |
| `'qb-drawtext'` | The same walk-up prompt, drawn with qb-core's own drawtext so it matches the rest of a QBCore server |

<Callout type="note">
The shipped default is `'ox_lib'`, but `'auto'` is the recommended setting — it keeps working if
you swap targeting resources later. If you run ox_target or qb-target, change this, or the walk-up
prompt is what your players will get.
</Callout>

`'qb-drawtext'` needs no extra resource — the prompt ships inside qb-core — but qb-core does have to
be started, and dd-cards errors at boot if it is not. `'auto'` never resolves to it; pick it
explicitly.

## Target

Used by both ox_target and qb-target. Ignored when the walk-up prompt is in use.

```lua
Target = {
    distance = 1.5,
    icon = 'fa-solid fa-print',
    icons = {
        claim = 'fa-solid fa-box-open',
        printing = 'fa-solid fa-hourglass-half',
        order = 'fa-solid fa-pen-nib',
    },
},
```

| Key              | Type     | Default                        | Notes                                                                                                                                                                  |
| ----------------- | -------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `distance`       | `number` | `1.5`                          | Metres. The two resources treat distance differently — ox_target sets it per option, qb-target per entity — so dd-cards hands this single value to whichever is in use |
| `icon`           | `string` | `'fa-solid fa-print'`          | Icon on the interaction that opens the business centre                                                                                                                 |
| `icons.claim`    | `string` | `'fa-solid fa-box-open'`       | A finished order, ready to collect                                                                                                                                     |
| `icons.printing` | `string` | `'fa-solid fa-hourglass-half'` | An order still being printed                                                                                                                                           |
| `icons.order`    | `string` | `'fa-solid fa-pen-nib'`        | Opening the card designer to place a new order                                                                                                                         |

Icons are Font Awesome class names — both target resources accept the same names. Browse the
[free set](https://fontawesome.com/search?o=r&m=free).

## Menu

Which menu the business centre and order list are drawn with.

```lua
Menu = 'auto',
```

| Value       | Behaviour                                                                      |
| ------------ | ----------------------------------------------------------------------------------- |
| `'auto'`    | ox_lib — it is a hard dependency, so it is always available                    |
| `'ox_lib'`  | ox_lib's context menu                                                          |
| `'qb-menu'` | qb-menu, for servers that would rather keep one menu style across every script |

qb-menu has to be chosen explicitly, since `'auto'` can never rule ox_lib out. Two behaviours differ
on qb-menu — see [Compatibility](/docs/dd-cards/compatibility#known-qb-menu-limitations).

## DrawText

Only read when `Interaction` resolves to `'ox_lib'` or `'qb-drawtext'`. Ignored entirely otherwise.
Both prompts share these options, so switching between the two needs no other edit.

```lua
DrawText = {
    key = 'E',
    distance = 2.0,
    position = 'left-center',
},
```

| Key        | Type     | Default         | Notes                                                                                                                             |
| ----------- | -------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
| `key`      | `string` | `'E'`           | Key that opens the fabric menu while the prompt is on screen. Use the name as ox_lib writes it in a keybind — `'E'`, `'G'`, `'H'` |
| `distance` | `number` | `2.0`           | Metres. How close the player must be for the prompt to appear                                                                     |
| `position` | `string` | `'left-center'` | One of `'left-center'`, `'right-center'`, `'top-center'`, `'bottom-center'`                                                       |

The key is registered through ox_lib for both prompts, so players can rebind it in GTA's own
settings either way.

<Callout type="note">
The position names are ox_lib's, and `'qb-drawtext'` maps them onto its own three anchors so one
setting covers both. qb-core has no bottom anchor, so `'bottom-center'` draws on the left there —
the other three land where they say.
</Callout>
