Kartik Scripts

Player to Player Styling

Let one player dress another. A stylist picks the clothes, the person in the chair watches it happen live, and nothing is saved or charged until they approve the result.

Styling happens inside a shop, and the shop decides what the session can change, a barber's chair styles hair, a tattoo parlour styles tattoos.

[!NOTE] A stylist picks your clothes, not your body. The ped tab is never offered, and the server strips it even if you add it to the config. Body changes go through Ped Surgery or the Ped Changer.


✂️ How It Works

  [Stylist stands in a shop] ──► [Targets a player] ──► [Enters a price]
                                        │
                                        ▼
  [Client gets Accept / Decline] ──► [Accepts] ──► [Client is frozen]
                                        │
                                        ▼
  [Stylist's menu opens, pointed at the client's ped]
                                        │
                                        ▼
  [Every pick lands on the client live - both of them see it]
                                        │
                                        ▼
  [Stylist confirms] ──► [Client: Keep it / Change it back]
                                        │
                                        ▼
          [Keep it] ──► [Saved] ──► [Bank charged] ──► [Stylist paid]
  1. A stylist standing in a shop looks at another player and picks Style their outfit from the target menu.
  2. They type a price between MinPrice and MaxPrice. If both are 0, the prompt is skipped and styling is free.
  3. The client gets a popup with the stylist's name and price, and Accept / Decline.
  4. On accept, the client is frozen in place and the stylist's menu opens, named for the shop, e.g. Ponsonbys - Dave.
  5. Every garment the stylist picks is applied to the client's ped immediately, so both players and everyone nearby watch the outfit come together.
  6. When the stylist confirms, the client is asked Keep it or Change it back. Declining restores exactly what they walked in with.
  7. Only on Keep it is the outfit saved and the price moved from the client's bank to the stylist's.

[!TIP] The price and approval popups use ox_lib. The target option needs ox_target or qb-target.


🏬 The Shop Decides What Opens

The Style their outfit option only appears while the stylist is standing in a shop zone, and that shop's type picks the tabs:

Shop TypeTabs the session opens
clothingClothing
barberHair, beard, makeup, skin
tattoosTattoos
wardrobeClothing

That map is Config.Styling.Tabs. A shop type missing from it hosts no styling at all, which is exactly why ped is absent.

Create the shops themselves in /shopmanager as normal; any shop of a listed type becomes a styling venue automatically.


⚙️ Configuration (shared/config_styling.lua)

Styling is off by default. Set Enabled = true to turn it on.

Config.Styling = {
    Enabled = false,

    -- Empty means anybody may style anybody.
    Jobs = {},
    RequireOnDuty = false,

    MinPrice = 0,
    MaxPrice = 5000,

    MaxDistance = 3.0,
    OfferTimeout = 30,    -- seconds to accept
    SessionTimeout = 900, -- seconds the stylist has to work

    Tabs = {
        clothing = { 'clothing' },
        barber   = { 'hair', 'beard', 'makeup', 'skin' },
        tattoos  = { 'tattoos' },
        wardrobe = { 'clothing' },
    },
}
SettingDefaultDescription
EnabledfalseTurns player styling on or off.
Jobs{}Jobs allowed to be the stylist. Empty means anybody in the shop may offer it. The person being styled never needs a job.
RequireOnDutyfalseStylist must be on duty. Leave false if your server has no duty system, or the option never shows.
MinPrice / MaxPrice0 / 5000Price range the stylist can charge. Both 0 makes styling free and skips the price prompt.
MaxDistance3.0How close the two must stay, re-checked on every pick.
OfferTimeout30Seconds the client has to accept.
SessionTimeout900Seconds the stylist has to work before the session expires.
Tabssee aboveWhich tabs each shop type opens. A type not listed cannot host styling.

[!WARNING] Config.Styling.Jobs and a shop's own job lock are two separate gates and both must pass. Setting Jobs = { 'tailor' } while your barber shop row is locked to barber means a stylist would need both job names at once, and nobody can style there, the option simply never appears.

Pick one layer: job-lock the shops in /shopmanager and leave Jobs = {}, or set Jobs and leave the shop rows unlocked.


🛡️ Rules & Protection

Everything is checked on the server, so a modified client can't get around it.

  • Consent first: the session only starts after the client presses Accept, and only saves after they press Keep it.
  • No body swaps: ped is stripped from the tab list server-side, whatever the client sends.
  • Shop verified from disk: the client sends only which shop it thinks it's in. The server reads that shop's row and re-checks the type, the job lock, and that both players stand inside the zone.
  • Stay in the shop: every pick re-checks distance and the zone. Walk apart or step outside and the session ends, restoring the client.
  • Frozen: the client is held in place for the session so they can't wander out of the chair. They're released before the approve popup, so they're never stuck waiting on a dialog.
  • Locks still apply: restricted garments are stripped on save by the normal item lock rules, a stylist can't dress you in something you aren't allowed to wear.
  • One at a time: a stylist runs one session at a time, and a client can have one offer at a time.
  • No double editing: shop menus refuse to open for a player who is currently being styled.

The session is cancelled, and both players are told, when:

  • the client declines, or the stylist closes the menu without finishing;
  • either player leaves the shop zone or walks out of range;
  • the offer or session times out;
  • either player leaves the server.

[!NOTE] If the client approves an outfit they can't afford, they keep it and the stylist is told they went unpaid. Stripping the clothes back off someone over a bank balance is the worse outcome of the two.


💬 Messages

SituationMessage
Not standing in a shopStand in a shop to style someone.
Shop type not in TabsThis shop does not offer styling.
Shop job lock failsThis shop is restricted to another job.
One of them outside the zoneYou both need to be inside the shop.
Too far apartThey are too far away.
Already being styledThey are already being styled.
Stylist already busyYou are already styling someone.
Stylist has a menu openClose your own menu first.
Someone else is dressing youSomeone is dressing you right now.
Client can't payYou could not afford the styling fee. The outfit is yours; settle it with them.

On this page