Events
XDEV Appearance includes a modular event system that allows developers to hook into internal workflows without modifying protected files.
The event system was designed for:
- integrations
- logging
- synchronization
- external systems
- custom workflows
- server-side automation
Event Philosophy
Most appearance systems expose inconsistent or hardcoded events.
XDEV instead uses a centralized structure through:
sendEvent()
Purpose:
- cleaner integrations
- easier maintenance
- configurable event behavior
- modular architecture
Event Configuration
Events are configured through:
Config.Events.ClientSide
Config.Events.ServerSide
Example:
Config.Events.ClientSide.system = {
OnMenuOpen = false,
OnMenuClose = false,
OnAppearanceSaved = false,
OnAppearanceCanceled = false,
OnPedChanged = false
}
Config.Events.ServerSide.system = {
OnSkinLoad = false,
OnSkinSave = false,
OnOutfitSave = false,
OnOutfitDelete = false
}
sendEvent Helper
Internal event triggering uses:
sendEvent('system:OnMenuOpen')
The helper automatically:
validates configuration
builds event names
triggers client/server events
handles synchronization
Internal Event Format
Generated event format:
resource_name:events:system:OnMenuOpen
Example:
xdev_appearance:events:system:OnMenuOpen
Client-Side Events
Supported client events:
OnMenuOpen
OnMenuClose
OnAppearanceSaved
OnAppearanceCanceled
OnPedChanged
Server-Side Events
Supported server events:
OnSkinLoad
OnSkinSave
OnOutfitSave
OnOutfitDelete
Event State Types
Event configuration supports multiple behaviors.
false
OnMenuOpen = false
Behavior:
event disabled completely
No event is triggered.
true
OnMenuOpen = true
Behavior:
event triggers only on current side
Example:
- client only
- server only
depending on where the event originated.
Custom Value
Example:
OnMenuOpen = "sync"
Behavior:
event triggers both client and server
This allows synchronized workflows automatically.
Client Event Example
Example listener:
RegisterNetEvent('xdev_appearance:events:system:OnMenuOpen', function()
print('Menu opened')
end)
Server Event Example
Example listener:
RegisterNetEvent('xdev_appearance:events:system:OnSkinSave', function(source)
print(source .. ' saved appearance')
end)
Menu Events
Menu events are useful for:
camera systems
HUD hiding
voice systems
animation systems
UI synchronization
Appearance Save Events
Save events are commonly used for:
logging
identity systems
backup systems
Discord integrations
Outfit Events
Outfit events are useful for:
wardrobe systems
uniform systems
job integrations
outfit sharing
Ped Change Events
Ped change events help with:
custom ped rebuilding
weapon systems
tattoo refreshing
addon ped synchronization
Synchronization Workflow
When events are configured for dual-side synchronization:
client event triggers
server relay triggers
matching side receives event
automatically through the helper system.
Safety Design
The helper intentionally validates event existence before triggering.
Purpose:
prevent invalid event spam
prevent missing configuration issues
reduce unnecessary network events
Recommended Usage
Recommended event usage:
external integrations
logging systems
analytics
custom gameplay systems
Developer Notes
The event system was intentionally designed to remain:
modular
lightweight
framework-independent
override-friendly
without forcing hardcoded dependencies.