π¨ Supported Clothing Scripts#
| Script | Framework | Auto-Detected |
|---|---|---|
| bl_appearance | All | β |
| illenium-appearance | All | β |
| fivem-appearance | All | β |
| rcore_clothing | All | β |
| qb-clothing | QBCore | β |
| skinchanger | ESX | β |
| crm-appearance | All | β |
| 0r-clothing (v1/v2/v3) | All | β |
βοΈ Configuration#
Located in config/config.lua:
Loading Appearance#
Config.ClothingExports = function(cacheped, skinData)
-- Automatically detects and uses your clothing script
if GetResourceState('bl_appearance') == 'started' then
exports.bl_appearance:SetPlayerPedAppearance(skinData)
elseif GetResourceState('illenium-appearance') == 'started' then
exports['illenium-appearance']:setPedAppearance(cacheped, skinData)
-- ... more scripts
end
end
Creating New Character Appearance#
Config.CreateCharacterExports = function()
-- Opens the clothing/creator menu for new characters
if GetResourceState('bl_appearance') == 'started' then
exports.bl_appearance:InitialCreation(function()
TriggerServerEvent('0r-multicharacterv3:server:changeRoutingBucket', true)
end)
-- ... more scripts
end
end
π§ Custom Clothing Script#
If you use a clothing script not listed above, add support:
Step 1: Add to ClothingExports#
Config.ClothingExports = function(cacheped, skinData)
-- Add your script at the top
if GetResourceState('my-clothing') == 'started' then
exports['my-clothing']:setPedAppearance(cacheped, skinData)
return
end
-- Existing scripts below...
if GetResourceState('bl_appearance') == 'started' then
-- ...
end
end
Step 2: Add to CreateCharacterExports#
Config.CreateCharacterExports = function()
if GetResourceState('my-clothing') == 'started' then
exports['my-clothing']:openCreator(function()
TriggerServerEvent('0r-multicharacterv3:server:changeRoutingBucket', true)
end)
return
end
-- Existing scripts below...
end
Step 3: Add to getskin.lua (Server-side)#
Edit server/getskin.lua:
lib.callback.register('0r-multicharacterv3:callback:getSkin', function(source, cid)
-- Add your script
if GetResourceState('my-clothing') == 'started' then
local skin = exports['my-clothing']:getSkin(cid)
if skin then
return skin.model, skin
end
return nil, nil
end
-- Existing scripts below...
end)
π How Appearance Data is Stored#
QBCore / QBox#
Appearance stored in playerskins table:
SELECT model, skin FROM playerskins WHERE citizenid = ? AND active = 1
ESX#
Appearance stored in users table:
SELECT skin, sex FROM users WHERE identifier = ?
bl_appearance#
Uses its own storage:
exports.bl_appearance:GetPlayerAppearance(citizenid)
rcore_clothing#
Uses its own storage:
exports.rcore_clothing:getSkinByIdentifier(citizenid)
π Default Models#
If no skin data is found, default models are used:
| Gender | Model |
|---|---|
| Male | mp_m_freemode_01 |
| Female | mp_f_freemode_01 |
-- In server/getskin.lua
model = (skin and skin.model) or
((player.sex == 'm' or tonumber(player.sex) == 0)
and 'mp_m_freemode_01'
or 'mp_f_freemode_01')
π Complete Configuration Example#
Config.ClothingExports = function(cacheped, skinData)
if GetResourceState('rcore_clothing') == 'started' then
exports.rcore_clothing:setPedSkin(cacheped, skinData)
elseif GetResourceState('illenium-appearance') == 'started' then
exports['illenium-appearance']:setPedAppearance(cacheped, skinData)
elseif GetResourceState('bl_appearance') == 'started' then
exports.bl_appearance:SetPlayerPedAppearance(skinData)
elseif GetResourceState('fivem-appearance') == 'started' then
exports['fivem-appearance']:setPedAppearance(cacheped, skinData)
elseif GetResourceState('qb-clothing') == 'started' then
TriggerEvent('qb-clothing:client:loadPlayerClothing', skinData, cacheped)
elseif GetResourceState('skinchanger') == 'started' then
exports["skinchanger"]:LoadSkin(skinData)
elseif GetResourceState('crm-appearance') == 'started' then
exports['crm-appearance']:crm_set_ped_appearance(cacheped, skinData)
else
-- Fallback or custom script
print('No supported clothing script found!')
end
end
Config.CreateCharacterExports = function()
if GetResourceState('bl_appearance') == 'started' then
exports.bl_appearance:InitialCreation(function()
TriggerServerEvent('0r-multicharacterv3:server:changeRoutingBucket', true)
end)
elseif GetResourceState('qb-clothing') == 'started' then
TriggerEvent('qb-clothes:client:CreateFirstCharacter')
elseif GetResourceState('skinchanger') == 'started' then
TriggerEvent('esx_skin:openSaveableMenu', function()
TriggerServerEvent('0r-multicharacterv3:server:changeRoutingBucket', true)
end)
end
end
β Troubleshooting#
Character Appears Naked/Default#
- Check if clothing script is started
- Verify skin data exists in database
- Check console for errors
Creator Doesn't Open#
- Ensure
CreateCharacterExportsis configured - Check if clothing script supports the event/export
Appearance Doesn't Save#
- This is handled by your clothing script
- Check clothing script documentation
- Verify database permissions