Docs/ORB Clothing/Stores & Zones

Stores & Zones

Default Locations

ORB Clothing ships with 28 pre-configured store locations (production mode):

TypeCountNotable Brands / Areas
Clothing13Binco, Suburban, Ponsonbys across LS, Sandy Shores, Paleto
Barber7Downtown, Vinewood, and more
Tattoo6Various parlors across the map
Accessories2High-end accessory stores
In test mode (`Config.TestMode = true`) only 4 stores load — one of each type.

Adding a New Store

Store locations are defined in Config.AllStoreLocations in config.lua. Each entry only needs the player coords (vector4 with heading), a type, and the pedPosition. Blip, zone size, and camera come from the store type (Config.StoreTypes):

lua
Config.AllStoreLocations = {
    {
        coords      = vector4(x, y, z, heading),  -- player-facing position
        type        = "clothing",                 -- clothing | accessories | barber | tattoo
        pedPosition = vector4(x, y, z, heading),  -- where the shopkeeper ped stands
        -- size     = vector2(11.0, 13.0),        -- optional: override the type's default zone size
    },
}

Barber Chairs

Barber locations support an optional chairs table so the player sits down during customization:

lua
{
    coords = vector4(-33.675, -152.162, 57.076, 158.017), type = "barber",
    chairs = {
        { coords = vector3(-34.89, -150.09, 57.09), h = 65.31, offset = vector3(0.03, -0.75, 0.0) },
    },
},

Zone Interaction

When a player enters a store zone, a help text appears. Press E to open the customization menu. The player is teleported to a routing bucket for isolated customization.

On exit or cancel, the player returns to their original position. If the player presses ESC, all changes are reverted (snapshot/restore system).

Admin-Created Stores

Stores created through the admin panel (/storeadmin) are saved to data/admin_stores.json. These persist across server restarts and are synced to all connected clients in real-time.