Skip to main content

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.