Skip to content

Clothing: exports, events & commands ​

Generated from the Lua in the release. Descriptions are the comments above each definition. Event names and export names are public contracts: they do not change between versions.

Exports ​

Call them as exports['lumo-clothing']:Name(...) from the side named in each table.

Client ​

ExportDescription
AddPropertyWardrobePoint(propertyId, coords, label)Register a lumo-interact prompt on a property's wardrobe point. Housing calls this once per property it loads; the returned id is passed back to remove it.
DescribeMyClothing()
DescribePlayer(serverId, incident)
GetClothingCondition()
GetPlayerData()
GetSkin()
GetWornGarments()
GetWornSignatures()
HandlesSlot(slot)True when this slot is one the item system manages, so an adapter can fall back to its own behaviour for things that are not garments (gloves, visors).
IsCharacterCreationActive()Export to check if character creation is currently active
IsCreatingCharacter()
IsHairTied()
IsLoggedIn()
IsPresentable()
OpenCharacterCreation(gender)================= EXPORTS FOR EXTERNAL USE ================= Export for qb-multicharacter and other resources to trigger character creation
OpenPropertyWardrobe(propertyId, opts)
OpenShop(shopId, shopType)Export to open a specific shop type for admin/player
OpenTakeOffMenu()
OpenWardrobe()
OpenWearMenu(slotName)
RefitHair()
ReloadSkin(health)
RemovePropertyWardrobePoint(id)
ResolveSlot(slot)
Save()
SearchClothingEvidence(filters, cb)
SetSlot(data)One call per garment instead of two. data =
SetVariation(data)
SetVariations(list)
StartAttendantWash(location, signatures, method)
StoreUndo()
TakeOffSlot(slot)
ToggleHairTie(silent)
ToggleSlot(slot)
WearSlot(slot)

Server ​

ExportDescription
CanCapture(src)
DeleteCharacter(src, id)
GetCharacters(src)
GetCitizenId(src)
GetClothingCondition(citizenid, signatures)Other resources: current cleanliness of a player's outfit (0-100 clean).
GetFramework()
GetLicenses(src)
GetLoggedInPlayers()
GetPlayer(src)
GetPlayerByCitizenId(id)
GetPlayerData(src)Exports for third-party scripts and for other Lumo resources running standalone. PlayerData is QB-shaped; see docs/STANDALONE.md.
GetSkin(id)
GiveGarmentItem(src, slot, drawable, texture, extra)Hand a specific garment to a player as an item. Useful for job kit rewards and for testing without buying anything. exports['lumo-clothing']:GiveGarmentItem(src, slot, drawable, texture, extra)
HasPermission(src, groups)
IsLoggedIn(src)
IsWearing(src, slot)
Login(src, id, data)
Logout(src)
Notify(src, msg, t)
OwnsGarment(citizenid, gender, props)Other resources: does this character own this garment?
RecordClothingEvidence(payload)Anything that wants to log a description it already has.
ResolveSlot(name)Canonical slot key for any alias, so adapters do not need their own table.
SearchClothingEvidence(filters)Police/CAD: look up stored clothing descriptions.
SetMetaData(src, key, value)
TakeOffGarment(src, slot)
ToggleGarment(src, slot)
useClothingItem(event, item, inventory, slot)ox_inventory item definitions call this export. Resolve the actual slot on the server; never trust metadata sent from a client.
useDetergent(event, _, inventory)ox_inventory calls items by export rather than through CreateUseableItem, so the same entry point is exposed both ways. Detergent deliberately does not share the clothing item handler: it is a consumable, not a garment.
useSoap(event, _, inventory)
WearGarmentFromInventory(src, slot)Server-side wardrobe API. Any resource can drive clothing through these instead of writing ped components itself, and get the item conversion, the saved-skin write and the dupe checks for free.

Events ​

  • Client events are triggered on the player: TriggerClientEvent(name, src, ...) from the server, or TriggerEvent(name, ...) on the client.
  • Server events are triggered with TriggerServerEvent(name, ...). The server checks the player, distance and amounts itself; never rely on a client to do it.

Client ​

EventArgumentsDescription
esx:onPlayerLogout
esx:playerLoadedxPlayer, isNew, skin
esx:setPlayerData
hospital:client:Revive
lumo-clothing:bridge:jobjob
lumo-clothing:bridge:loaded
lumo-clothing:client:applySlotslot, drawable, textureThe server has already written the saved skin; this only mirrors the change onto the ped and into skinData so a later save stays consistent.
lumo-clothing:client:attendantWashdata
lumo-clothing:client:cancelWash
lumo-clothing:client:confirmTakeOffdata
lumo-clothing:client:confirmWeardata
lumo-clothing:client:create-first-characteropts
lumo-clothing:client:CreateFirstCharacteropts
lumo-clothing:client:openJobLockerdata
lumo-clothing:client:openLockerWardrobedata
lumo-clothing:client:openTakeOff
lumo-clothing:client:openWearslotName
lumo-clothing:client:payWashdata
lumo-clothing:client:restorePersonalClothesdata
lumo-clothing:client:toggleSlotdata
lumo-clothing:client:useHairTie
lumo-clothing:client:useSoap
lumo-clothing:client:useWashItem
lumo-clothing:client:washFinishedFired by the attendant and item routes so the dirty-texture swap and the cached condition here stay in step with them.
lumo-clothing:client:wearJobUniformdata
lumo:admin:captureDoneinfo
lumo:admin:receiveGlobalItemsitems
lumo:admin:receiveMainShopStatusstatus
lumo:applyAndSaveSkinskinclient.lua
lumo:applyTattoostattoos
lumo:cartPurchasedpayload
lumo:clearNPCs
lumo:clothing:conditiondata
lumo:openOutfits
lumo:openPropertyWardrobepropertyId, opts
lumo:openShopshopId================= EVENTS =================
lumo:openWardrobe
lumo:outfitsReloadoutfits
lumo:outfitsUpdatedoutfits================= SERVER PUSHES =================
lumo:postPurchaseSavepayload
lumo:purchaseDeniedpayload
lumo:purchaseFailed
lumo:rebuildBlips
lumo:rebuildZones
lumo:rp:describeResultpayload
lumo:rp:requestDescriptionofficerSrc, incidentThe officer asked; answer to the server, which stores it and replies to them.
lumo:serviceApprovedinfoServer said OK: commit and close
lumo:serviceDeniedreasonServer said NO: restore & close
lumo:setDebugstate
lumo:shopItemsChangedshopId
lumo:shopsUpdatedd
qb-clothes:client:CreateFirstCharacterPublic QB/Qbox appearance creator contract.
qb-clothes:loadSkinisNew, model, dataServer pushes saved skin after login/reload
qb-clothing:client:loadOutfitoData
qb-clothing:client:loadPlayerClothingdata, ped
qb-clothing:client:openOutfitMenu

Server ​

EventArgumentsDescription
lumo-clothing:loadPlayerSkin
lumo-clothing:saveSkinmodel, skin
lumo-clothing:server:buyDetergentlocationIdThe laundromat counter sells the cleaning item. Price, distance and money are all decided here; the client only asks.
lumo-clothing:server:releaseMachine
lumo-clothing:server:takeOffslot
lumo-clothing:server:toggleSlotslotThe one event every other resource should fire. Whatever the radial menu, a command or a job script asks for, the decision of which way to go is made here against the saved skin rather than against whatever the ped looks like.
lumo-clothing:server:wearItemSlotitemSlotWear one specific carried garment, addressed by its inventory slot. Used by the /wear picker so choosing between two coats is unambiguous.
lumo-clothing:server:wearSlotslot
lumo:admin:addOwnershopId, identifier
lumo:admin:addOwnerFromPlayershopId, serverId
lumo:admin:createShopd================= ADMIN OPS (CLOTHING-ONLY) =================
lumo:admin:deleteItemshopId, itemId
lumo:admin:deleteShopshopId
lumo:admin:getGlobalItemssearch, category, gender, page, pageSize
lumo:admin:getMainShopStatus
lumo:admin:importGlobalItemsshopId, itemIds
lumo:admin:processCapturedImagedata========================================= [SECTION] EVENTS =========================================
lumo:admin:removeMainShop
lumo:admin:saveCapturedItemdata
lumo:admin:saveItemshopId, payload
lumo:admin:setMainShopdata
lumo:admin:setShopEnabledshopId, enabled
lumo:admin:setShopMarginshopId, marginOwners tune their own margin; admins can set it for any shop.
lumo:admin:unlinkItemshopId, itemId========================================= [SECTION] EVENTS =========================================
lumo:admin:updateShopLocationshopId, coords
lumo:buyItemdata========================================= [SECTION] EVENTS =========================================
lumo:deleteOutfitoutfitName, outfitIdDelete outfit
lumo:purchaseCartshopId, method, itemIds========================================= [SECTION] EVENTS =========================================
lumo:purchaseServiceshopId, method============== SERVICE PURCHASE (barber / tattoo) ==============
lumo:renameOutfitoutfitId, newName========================================= [SECTION] EVENTS =========================================
lumo:rp:describeResponseofficerSrc, incident, descriptionThe described player's client answers here; we store it and hand it back.
lumo:rp:reportWearsignatures, dirt, damage, reason
lumo:saveNamedOutfitoutfitName, model, skinData
lumo:saveTattoostattooDataSave Tattoos
lumo:setFavoriteOutfitoutfitId, turnOn========================================= [SECTION] EVENTS =========================================
lumo:wearFavoriteQuick-wear favorite
lumo:wearOutfitoutfitWear outfit (visual on client)
qb-clothes:loadPlayerSkin
qb-clothing:loadPlayerSkin

Commands ​

CommandSideDescription
/describeclient
/hairtieclient
/lumo_adminclient
/lumo_debugserver======================================== [SECTION] COMMANDS ========================================
/openshopclientOpens a shop from anywhere, so admins only.
/takeoffclient
/testcreationclientCommand to test character creation (admin only)
/undressclient
/wearclient