> For the complete documentation index, see [llms.txt](https://atiysus-organization.gitbook.io/aty-scripts/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://atiysus-organization.gitbook.io/aty-scripts/inventory/features/admin-panel.md).

# Admin Panel

## Admin Panel

```
invadmin
```

A full administration surface inside the game — not a config file, not a set of console commands with a menu drawn over them. Everything here takes effect without a restart, except the few settings read once at start — the Settings tab says so beside each of them.

#### The panel never edits your files

Every change made here is stored in a database table **beside** the config file, not written into it:

| What you edit   | Goes to         | The file stays                             |
| --------------- | --------------- | ------------------------------------------ |
| Item fields     | `aty_overrides` | `data/items.lua` — the developer's copy    |
| Settings        | `aty_settings`  | `shared/config.lua` — the factory defaults |
| Shops & stashes | `aty_places`    | `Config.Shops` / `Config.Stashes`          |
| Recipes         | `aty_recipes`   | `data/recipes.lua`                         |

The panel shows the file value beside the live one, so "what did this used to be" always has an answer that cannot itself have been edited from the panel.

For the same reason the panel **will not delete a shop or stash the file declares** — it refuses with `defined in config.lua — edit the file`, because deleting it would only last until the next restart put it back.

{% hint style="info" %}
One deliberate exception: **`Config.Admin` is read from the file only.** If the gate that decides who may open the panel lived in the panel, one bad value would lock every admin out of the screen they need to fix it. A resource that can brick itself is worse than a resource with a config file.
{% endhint %}

#### Tabs

| Tab             | What it does                                                                                                                                                                                                                        |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Players**     | Everyone online, their container id, slot and weight usage, and a button to open any bag that has loaded                                                                                                                            |
| **Containers**  | Every container saved in the database — player, stash, trunk, glovebox, wear, bag — the 400 most recently written, with version and last-write time. Any of them can be opened. Ground piles live in memory only and are not listed |
| **Ledger**      | The movement log, filterable by item, actor, container or transaction id, with **Roll back** on every row                                                                                                                           |
| **Integrity**   | Deep scan: counts every unit and names duplicates, and reads the ledger for ghosts                                                                                                                                                  |
| **Economy**     | What the ledger has measured — what is being created and destroyed, what is held, and which containers gained value out of nowhere                                                                                                  |
| **Definitions** | Item definitions, editable live, grouped under plain headings                                                                                                                                                                       |
| **Settings**    | Config overrides, written without touching the file                                                                                                                                                                                 |
| **Appearance**  | The interface's look, repainted live while you edit it; nothing is written until **Save**                                                                                                                                           |
| **Shops**       | Shop catalogues, stock and prices                                                                                                                                                                                                   |
| **Stashes**     | Registered stashes                                                                                                                                                                                                                  |
| **Recipes**     | Crafting recipes, edited as a form                                                                                                                                                                                                  |
| **Airdrops**    | Loot tables and live crates, with per-line validation                                                                                                                                                                               |
| **Dumpsters**   | What a dumpster can hold and how often it refills, with per-line validation                                                                                                                                                         |
| **Migration**   | Three steps: pick where from, see what would happen, move it — each loss is a switch you turn on                                                                                                                                    |

#### Taking an item over from the item screen

**Definitions** edits an item live. Beyond the obvious fields — label, weight, stack, rarity, shelf life — four of them decide how the item BEHAVES:

| Field                                 | What it does                                                                                                                                          |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Condition**                         | Whether the item wears out. On means a new one starts at 100%                                                                                         |
| **Use animation**                     | The clip played while it is used: `eat`, `drink`, `bandage`, `medkit`, `pill`, `armour`                                                               |
| **Held object**                       | The model in the hand, e.g. `prop_ecola_can`. Six numbers may follow to place it — `prop_ecola_can 0 0 0.03 0 0 -40` — which is what `invprop` prints |
| **Hunger / Thirst / Health / Armour** | What one use restores                                                                                                                                 |

Setting an animation, a held object or an effect amount is what **takes the item over from the framework**. Until then a framework handler runs that item with its own bar, clip and prop (see Consumables & Portions); afterwards the inventory runs it, live, with no restart. Clear the fields to hand it back.

```
invroute <item>                         who runs it, and what the player sees
invprop <playerId> <model> [x y z rx ry rz] [bone] [clip]
```

`invprop` puts the model in that player's hand with the clip running and lets them nudge it — arrows move, SHIFT rotates, CTRL for fine steps, ENTER prints the numbers for this screen and for `data/items.lua`. A held object cannot be reasoned out; every model's origin sits where its author left it.

#### Giving items

Two places, one rule — the item goes through the same transaction as any other, the ledger names the admin with the reason `admin_give`, and an open inventory updates at once.

* **Definitions** — pick an item, pick an online player, set the amount, **Give**. The player gets a notification.
* **The container panel** — open any container (a player's bag from **Players**, anything from **Containers**, a shared stash with **Contents** on the **Stashes** tab), pick an item, set the amount, **Add item**.

A give that does not fit — too heavy, no free slot — is refused under the form and nothing is written. Worn clothes, shops and search results cannot be given into.

#### Opening a container

Any container on the Containers tab can be opened and edited directly. One nobody has open is read into memory from the database first, so what you edit is what the engine holds. On the Players tab a player whose bag has not loaded yet shows **not loaded** instead of a button — an unloaded bag is asleep, not empty.

#### Permissions

```lua
Config.Admin = {
    enabled = true,
    ace = 'aty_inventory.admin',
    perms = { 'admin', 'god' },
}
```

Three ways in: the server console, the ACE permission (`add_ace group.admin aty_inventory.admin allow`), or a qb-core permission level listed in `perms`. The gate is checked on every request, not once when the panel opened. On qb-core and ESX, `/invadmin` is registered through the framework's own command system.

```
invadmins [playerId]       who may open the panel, and why
invadmintest [playerId]    asks the server every question the panel asks
```

{% hint style="danger" %}
`perms` is only read on qb-core. On ESX, Qbox and a server with no framework, the ACE permission is the whole answer — grant it before expecting staff to get in.
{% endhint %}
