> For the complete documentation index, see [llms.txt](https://wiki.qfdevelopers.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.qfdevelopers.com/scripts/editor-3/configuration.md).

# Configuration

Page dedicated to how to configure our Skin Menu \[V2]

#### Configuration Guide (`config/config.lua` & `config/default_data.lua`)

**Targeting Integration** The script detects third-eye targeting systems on its own — you normally do not have to touch this. If none is running, it falls back to proximity-based 'E' interactions.

```lua
Config.Target = {
    ox_target = GetResourceState('ox_target') == 'started' and true or false,
    qtarget   = GetResourceState('qtarget') == 'started' and true or false,
    qb_target = GetResourceState('qb-target') == 'started' and true or false,
    useE      = not (GetResourceState('ox_target') == 'started'
                  or GetResourceState('qtarget') == 'started'
                  or GetResourceState('qb-target') == 'started'),
}
```

Override a value only if you want to force one specific method. `ox_target` is the recommended one.

**Shop Specialization** Unlike older scripts where every clothing store allowed DNA changes, `qf_skinmenu_v2` allows you to strictly segregate what players can modify based on the shop they interact with.

```lua
Config.ShopCategories = {
    ['clothing'] = { 'clothes', 'addons' }, -- Only apparel and props
    ['barber']   = { 'dna', 'face' },       -- Hair, makeup, and facial features
    ['tattoo']   = { 'tattoos' },           -- Exclusive to tattoo parlors
    ['surgeon']  = { 'dna', 'face' },       -- Plastic surgery (parents, structure)
    ['peds']     = { 'peds' },              -- Ped model switching
}

-- Which groups inside those pages a shop type may open.
Config.ShopGroups = {
    ['clothing'] = { 'top', 'bottom', 'props' },
    ['tattoo']   = { 'tattoos_torso', 'tattoos_head', 'tattoos_arms', 'tattoos_legs' },
    ['barber']   = { 'hair', 'makeup' },
    ['surgeon']  = { 'parents', 'features' }
}
```

**Photo Studio Coordinates** When a player creates a new character or takes a wardrobe photo, they are temporarily teleported to an isolated dimension. You must provide coordinates for a visually appealing, well-lit location. `screenshot-basic` is required for this feature.

```lua
Config.PhotoStudio = {
    coords = vector3(617.6306, 2766.3438, 42.0881),
    heading = 182.6283,
}
```

**Interface & Language**

```lua
Config.PrimaryColor = "#2F6AFE"
Config.Side = "left"                -- side of the menu: "left" or "right"
Config.Locale = "en"                -- en, de, es, fr, it, ja, ko, pl, pt
Config.DateFormat = "dd.MM.yyyy"
Config.RotateSides = false          -- flip the direction the ped rotates
Config.BlockNotifications = true    -- hide GTA notifications while the menu is open
Config.DisableIdleAnimations = true -- stop the ped fidgeting and the AFK camera
Config.OpenMenuOnFirstJoin = false  -- open the creator automatically for new players
```

**Preview Images** Thumbnails for clothes and props are loaded either from our CDN or from your own server.

```lua
Config.UseImages = true
Config.ImageSource = "remote" -- "local" or "remote"
Config.RemoteImagePath = "https://data.qfdevelopers.com/qf_skinmenu_v2/"
```

With `"local"` the images are served from the `images/` folder inside the resource.

**Outfits**

```lua
Config.OutfitPrefix = "qf"   -- prefix of shared outfit codes, e.g. qf123
Config.Outfits = {
    MaxSavedOutfits = 20     -- per character
}
```

**Tattoo Shop Integration** If you already run a dedicated tattoo resource, hand the tattoo page over to it instead of using the built-in list. Enable exactly one of these.

```lua
Config.ScriptTattoos = {
    buildIn = true,          -- use the tattoos defined in config/tattoos.lua
    rcore_tattoos = false,
    vms_tattooshop = false,
}
```

**Peds & Permissions**

```lua
Config.AdminGroup = "admin"   -- group seeded as admin for the panel on first start
Config.PedPermission = false  -- Ace permission or framework group required for the Peds page
Config.AllowedPeds = {}       -- managed in the admin panel, seeded from DefaultData.AllowedPeds
```

**Shop Interaction**

```lua
Config.ShopInteractionDelay = 5000    -- ms before the interaction can be used
Config.ShopInteractionCooldown = 5000 -- ms between two interactions

Config.ShopBlips = {
    ['clothing'] = { sprite = 73,  color = 47, scale = 0.7, label = "Clothing Store",  targetIcon = "fas fa-shirt" },
    ['barber']   = { sprite = 71,  color = 0,  scale = 0.7, label = "Barber Shop",     targetIcon = "fas fa-scissors" },
    ['tattoo']   = { sprite = 75,  color = 0,  scale = 0.7, label = "Tattoo Salon",    targetIcon = "fas fa-pen-nib" },
    ['surgeon']  = { sprite = 102, color = 0,  scale = 0.7, label = "Plastic Surgeon", targetIcon = "fas fa-user-md" }
}
```

***

### Shops, Prices & Commands

`Config.Shops`, `Config.Prices`, `Config.Commands` and `Config.AllowedPeds` are intentionally left empty in `config.lua` — they live in the database and are edited in game through `/skinadmin`. Their initial contents come from `config/default_data.lua`.

```lua
DefaultData.Prices = {
    ['clothing'] = 500,
    ['barber']   = 200,
    ['tattoo']   = 300,
    ['surgeon']  = 5000
}

DefaultData.Commands = {
    ['skinmenu']  = { name = 'skinmenu',  permission = false },
    ['outfits']   = { name = 'outfits',   permission = false },
    ['skinreset'] = { name = 'skinreset', permission = false },
    ['skingive']  = { name = 'skingive',  permission = "admin" },
    ['skinpeds']  = { name = 'skinpeds',  permission = "admin" },
}

DefaultData.Shops = {
    {
        type = 'clothing',                            -- clothing, barber, tattoo or surgeon
        coords = vec3(73.8728, -1392.0785, 29.3761),
        heading = 278.8409,
        range = 3.0,
        model = 'a_m_y_epsilon_01',                   -- ped standing at the shop
        label = "Clothing Store",
        jobs = { 'police' }                           -- optional, restricts the shop to jobs
    },
}
```

{% hint style="warning" %}
**`default_data.lua` is only imported into an empty database.** On the first start the shops, prices and commands are copied into the `qf_skinmenu_locations` and `qf_skinmenu_settings` tables, and from then on the database wins — later edits to the file do nothing.

Use `/skinadmin` to change them afterwards, or empty the corresponding table if you want the file to be imported again.
{% endhint %}


---

# 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://wiki.qfdevelopers.com/scripts/editor-3/configuration.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.
