> For the complete documentation index, see [llms.txt](https://devix.gitbook.io/devix/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://devix.gitbook.io/devix/devix-appearance/appearance-config.md).

# Appearance Config

This file controls the appearance panel: language, camera, lights, barber and clothing shops, pricing, inventory integration, and admin access. Everything below is explained in simple terms.

***

## Language

| Option            | What it does                                                                          |
| ----------------- | ------------------------------------------------------------------------------------- |
| **Config.Locale** | Panel language: `"en"`, `"tr"`, `"de"`, `"ru"`. Affects labels and buttons in the UI. |

***

## Camera (studio / character view)

When the panel opens, the character is shown in a “studio” view. These options control the camera.

| Option                                     | What it does                                                                |
| ------------------------------------------ | --------------------------------------------------------------------------- |
| **Config.CamDistanceMin / CamDistanceMax** | How close and how far the camera can zoom (scroll).                         |
| **Config.CamDistanceDefault**              | Default zoom when the panel opens.                                          |
| **Config.CamHeightOffset**                 | Camera height relative to the character (positive = higher).                |
| **Config.RotationSensitivity**             | How fast the character rotates when you move the mouse (degrees per pixel). |
| **Config.ZoomSensitivity**                 | How fast zoom in/out when you scroll.                                       |
| **Config.CamFov**                          | Camera field of view (angle). Lower = more zoomed in.                       |

***

## Light and depth of field

| Option                                    | What it does                                                                    |
| ----------------------------------------- | ------------------------------------------------------------------------------- |
| **Config.UseCharacterLight**              | If true, a light illuminates only the character (background stays dark).        |
| **Config.CharacterLightColor**            | RGB of the light (e.g. warm white).                                             |
| **Config.CharacterLightRange**            | How far the light reaches.                                                      |
| **Config.CharacterLightIntensity**        | Brightness of the light.                                                        |
| **Config.CharacterLightOffset**           | Position of the light relative to the character (x, y, z).                      |
| **Config.UseDoF**                         | Depth of field: if true, only the character is in focus, background is blurred. |
| **Config.DoFStrength / DoFNear / DoFFar** | Blur strength and near/far focus limits.                                        |

***

## Outfit purchase and ped selector

| Option                         | What it does                                                                                                                                                                      |
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Config.OutfitPurchasePrice** | Base price for buying a full outfit (multiplied by shop’s priceMultiplier).                                                                                                       |
| **Config.canPedUse**           | If true, the “Character Model” (ped) selector is shown in the Face & Head tab so the player can change body model. If false, only face/hair/makeup can be changed, not the model. |

***

## Barber shops (hair only)

**Config.BarberShops** = list of barber locations. Each entry has:

* **label** — Name shown on the map/blip.
* **type** — Unique id (e.g. `"barber"`, `"barber_paleto"`).
* **coords** — vector4(x, y, z, heading).
* **blipSprite / blipColor / blipScale / blipLabel** — Map blip.

Barber marker (interaction):

* **Config.BarberShopMarkerDistance** — Distance at which the marker appears and the player can press the key.
* **Config.BarberShopMarkerType / Scale / Color** — Marker look.
* **Config.BarberShopPromptKey** — Key shown in the prompt (e.g. `"E"`).

***

## Clothing shops (press E at store)

**Config.ClothingShops** = list of clothing stores. Each entry has:

* **label**, **type**, **coords** — Same idea as barber.
* **blipSprite / blipColor / blipScale / blipLabel** — Map blip.
* **categories** — Which clothing categories this shop sells (e.g. t-shirt, pants, shoes).
* **priceMultiplier** — Multiplier for all prices (e.g. 2.0 = luxury, 0.6 = budget).
* **prices** — Optional per-category override (e.g. torso2 = 1200). If omitted, **Config.ClothingDefaultPrices** is used (and still multiplied by priceMultiplier).
* **drawables** — Optional: which clothing **indices** (drawable IDs) are sold in this shop. Can be a range `{ min = 0, max = 50 }`, multiple ranges, or a list of IDs. If omitted, all drawables for that category are available.

Clothing marker:

* **Config.ClothingShopMarkerDistance** — Distance to show marker and allow opening.
* **Config.ClothingShopMarkerType / Scale / Color** — Marker look.
* **Config.ClothingShopPromptKey** — Key to open (e.g. `"E"`).
* **Config.ClothingType** — If false, no auto outfit filter; character keeps current clothes when opening. If true, store’s drawable ranges filter what you see.

***

## Default category prices

**Config.ClothingDefaultPrices** = category → default price (number).\
Used when a shop does not set its own **prices** for that category. Final price is still affected by the shop’s **priceMultiplier**.

Categories: arms, t-shirt, torso2, pants, vest, shoes, bag, mask, decals, accessory, hat, glass, ear, watch, bracelet.

***

## Inventory integration (clothe\_\* items)

When the player **buys** clothing at a shop, you can either only save the skin or also give an **inventory item** (e.g. for devix-inventory’s clothing slots).

| Option                                 | What it does                                                                                                                                           |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Config.ClotheItem**                  | If true, purchased clothing is also added as an item to the inventory (e.g. clothe\_hat, clothe\_tshirt). If false, only the skin is saved, no item.   |
| **Config.ClotheItemInventoryResource** | Which resource receives the item (e.g. `"devix-inventory"`). Set to nil if you don’t use inventory items.                                              |
| **Config.ClotheItemCategories**        | Which categories become inventory items. Categories in this list get an item; others (e.g. ear, watch, bracelet) are only saved to the skin in the DB. |

***

## Per-ID clothing prices

| Option                            | What it does                                                                                                                                                                                                                                   |
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Config.UsePerIdClothingPrices** | If true, price can depend on the **drawable ID** (and optionally shop type). Prices are then read from **config\_clothing\_prices.lua** (DefaultClothePrice, Clothelist). If false, only category-based prices (and priceMultiplier) are used. |
| **Config.DefaultClothePrice**     | In config.lua this is usually `{}`; real per-ID defaults go in **config\_clothing\_prices.lua**.                                                                                                                                               |
| **Config.Clothelist**             | In config.lua this is usually `{}`; per-shop per-ID prices go in **config\_clothing\_prices.lua**.                                                                                                                                             |

See [CONFIG\_CLOTHING\_PRICES.md](broken://pages/75ef7e49d332b5cf8d8091e4599bbf3140444618) for how to fill DefaultClothePrice and Clothelist.

***

## Admin panel

| Option                  | What it does                                                                                                                                                                                   |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Config.AppsAdminAce** | ACE permission for **/appsadmin** (e.g. `"group.admin"` or `"devix-appearance.appsadmin"`). Player must have this (or group.admin, or DEVIX.HasPermission) to open the admin appearance panel. |

***

## Helper functions (you usually don’t edit these)

The config also defines functions used by the script:

* **Config.GetClothingShopCategories(shopType)** — Returns the list of categories for that shop type.
* **Config.GetClothingPrice(shopType, categoryKey)** — Returns the price for that shop and category (category default × priceMultiplier, or shop override).
* **Config.GetClothingPriceForId(shopType, categoryKey, drawableId, pedHash)** — When UsePerIdClothingPrices is true, returns price by drawable ID (and optionally shop/ped); otherwise falls back to GetClothingPrice.
* **Config.GetClothingDrawablesRange(shopType, categoryKey)** — Returns the drawable range(s) or list for that shop and category.
* **Config.GetDrawableFromFilteredIndex / GetFilteredIndexFromDrawable** — Convert between slider index and actual drawable when using multiple ranges.
* **Config.GetClothingDrawablesList(shopType, categoryKey)** — Returns the drawable list when the shop uses list format.

You only need to edit the **tables** (BarberShops, ClothingShops, ClothingDefaultPrices, etc.); the script uses these functions to read them.

***

## Summary

* **Locale** = panel language.
* **Camera / light / DoF** = how the character looks in the panel.
* **BarberShops / ClothingShops** = where players can open the panel and what they can buy.
* **ClothingDefaultPrices / priceMultiplier / prices** = how much each category (or item) costs.
* **ClotheItem / ClotheItemInventoryResource / ClotheItemCategories** = whether purchases become inventory items (e.g. devix-inventory).
* **UsePerIdClothingPrices** = use per-drawable prices from config\_clothing\_prices.lua.
* **AppsAdminAce** = who can use /appsadmin.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://devix.gitbook.io/devix/devix-appearance/appearance-config.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
