# CyberM.loot — client runtime

Runs inside the game process. Reads and presentation are local; anything that changes shared state has to go through the server.

6 functions.

## acceptPickup

```lua
CyberM.loot.acceptPickup(id, item, quantity)
```

`GAME` — Requires a live game instance.

Applique localement un pickup déjà accepté par le serveur.

API interne appelée uniquement après `cyberm:loot:pickupResult`. Elle projette l'objet dans l'inventaire REDengine local; l'inventaire persistant reste une responsabilité serveur.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `id` | `integer` | required | — |
| `item` | `string` | required | — |
| `quantity` | `integer` | required | — |

Returns: `true en cas de succès`, `raison du refus`

Registered in `ResourceHost.cpp` (line 6686) as `LuaLootAccept`.

## clear

```lua
CyberM.loot.clear()
```

`GAME` — Requires a live game instance.

Supprime toutes les projections locales et leurs prompts.

Clears the client-side native loot projection when the caller has `world.loot`. This is intended for the authoritative loot replication package during snapshot replacement; ordinary gameplay resources should request server-owned changes instead.

Registered in `ResourceHost.cpp` (line 6684) as `LuaLootClear`.

## remove

```lua
CyberM.loot.remove(id)
```

`GAME` — Requires a live game instance.

Retire une projection locale de loot.

Removes one replicated native loot entity from this client's projection and requires `world.loot`. It does not by itself delete the server record, so gameplay code should normally use the authoritative loot package API.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `id` | `integer` | required | — |

Returns: `true en cas de succès`, `raison du refus`

Registered in `ResourceHost.cpp` (line 6683) as `LuaLootRemove`.

## requestPickup

```lua
CyberM.loot.requestPickup(id)
```

`NETWORK` — Uses the network backend.

Demande au serveur de ramasser un drop.

Le serveur contrôle l'existence, le routing bucket et la distance calculée depuis son dernier snapshot du joueur.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `id` | `integer` | required | — |

Returns: `true si la requête réseau est partie`, `raison du refus local`

Registered in `ResourceHost.cpp` (line 6685) as `LuaLootRequest`.

## setAuthorityEnabled

```lua
CyberM.loot.setAuthorityEnabled(enabled)
```

`GAME` — Requires a live game instance.

Active ou désactive la projection de loot autoritaire.

Réservé à `cyberm_loot`. Quand il est actif, les choix, conteneurs et drops vanilla sont neutralisés et les objets physiques deviennent de simples représentations du registre serveur.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `enabled` | `boolean` | required | — |

Returns: `true en cas de succès`, `raison du refus`

Registered in `ResourceHost.cpp` (line 6681) as `LuaLootAuthority`.

## upsert

```lua
CyberM.loot.upsert(drop)
```

`GAME` — Requires a live game instance.

Crée ou met à jour la projection locale d'un drop serveur.

API interne de réplication. Demande la permission `world.loot`; un script gameplay ne doit pas inventer un drop côté client.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `drop` | `table { id, item, quantity, position, radius, label, model, revision }` | required | — |

Returns: `true en cas de succès`, `raison du refus`

Registered in `ResourceHost.cpp` (line 6682) as `LuaLootUpsert`.

