Overrides
XDEV Appearance includes a modular override system that allows developers to replace internal behavior safely without modifying protected files.
The override system was designed to support:
- framework replacements
- custom integrations
- economy systems
- notifications
- permission systems
- animation systems
- validation systems
Override Philosophy
Most appearance systems hardcode framework logic directly into protected files.
XDEV intentionally separates:
core logic
framework logic
custom logic
through override hooks.
Purpose:
- easier maintenance
- safer updates
- compatibility flexibility
- cleaner integrations
Override Locations
Overrides are primarily located inside:
shared/client.lua
shared/server.lua
Client-Side Overrides
Client-side overrides:
Config.Override.ClientSide.Functions
Server-Side Overrides
Server-side overrides:
Config.Override.ServerSide.Functions
DeadCheck Override
Purpose:
validate whether the player is alive
Example:
function Config.Override.ClientSide.Functions.DeadCheck(ped)
return false
end
Expected return:
true -> player valid/alive
false -> block action
VehicleCheck Override
Purpose:
validate vehicle state
Example:
function Config.Override.ClientSide.Functions.VehicleCheck(ped)
return false
end
Expected return:
true -> player inside vehicle
false -> player not inside vehicle
Check Override
Purpose:
global custom validation hook
Example:
function Config.Override.ClientSide.Functions.Check(ped)
return false
end
Useful for:
- admin restrictions
- job restrictions
- zone restrictions
- custom permissions
- event locking
Client Notification Override
Purpose:
replace client-side notification systems
Example:
function Config.Override.ClientSide.Functions.SendNotify(message, ...)
return false
end
QBCore example:
QBCore.Functions.Notify(message, 'error')
Walkstyle Override
Purpose:
save and restore movement styles
Example:
function Config.Override.ClientSide.Functions.Walkstyle()
end
Supports:
- RPEmotes
- custom movement systems
- animation frameworks
Outfit ID Override
Purpose:
generate unique outfit identifiers
Example:
function Config.Override.ServerSide.Functions.CreateOutfitID()
return 'OUTFIT_ID'
end
Developers may replace this with:
- UUID systems
- timestamps
- random generators
- external APIs
Money Override
Purpose:
handle appearance payments
Example:
function Config.Override.ServerSide.Functions.RemoveMoney(src, price)
return false
end
Expected return:
true -> payment successful
false -> payment failed
Server Notification Override
Purpose:
replace server-side notification systems
Example:
function Config.Override.ServerSide.Functions.SendNotify(src, message, ...)
return false
end
Useful for:
- framework notifications
- Discord logging
- admin systems
- custom UI systems
Framework Toggle
Framework behavior may be toggled using:
Config.Override.ClientSide.Framework = true
When disabled:
developers must implement validation manually
Universal Architecture
Overrides intentionally avoid framework-specific assumptions.
This allows easier integration with:
QBCore
ESX
standalone systems
custom frameworks
Recommended Override Workflow
Recommended integration process:
1. Configure notifications
2. Configure money handling
3. Configure validation checks
4. Configure walkstyles
5. Configure permissions
Safe Update Philosophy
The override system exists to reduce update conflicts.
Developers should avoid editing protected logic directly whenever possible.
Instead:
replace behavior through overrides
This improves:
- update safety
- compatibility
- maintainability
Developer Notes
XDEV intentionally exposes core interaction layers through overrides because appearance systems frequently require server-specific behavior.
The override architecture was designed specifically for:
server customization
framework replacement
long-term scalability
without rewriting the core resource.