Skip to main content

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.