Skip to content

Custom Car Stickers

All main settings are located in rs_car_stickers/config.lua. The examples below use existing defaults. Modify the corresponding fields in your full configuration instead of replacing entire tables with shortened examples.


config.lua
Config.Locale = 'en'
Config.Framework = 'auto' -- auto | qbox | qbcore | esx | standalone
Config.Debug = false
Config.Production.enabled = true
OptionDescription
Config.LocaleSelect a language from locales/*.json
Config.FrameworkAutomatically detect the framework, or select a specific adapter
Config.DebugAdditional diagnostic output; normally false on production servers
Config.Production.enabledEnable physical printing and the production workshop; false switches to the legacy editor workflow
config.lua
Config.Providers = {
inventory = 'auto',
target = 'auto',
menu = 'auto',
input = 'auto',
progress = 'auto',
}

Supported defaults: ox_inventory or qb-inventory for inventory; ox_target or qb-target for targeting; ox_lib or qb alternatives for menu/input; ox_lib, progressbar, or the built-in progress UI for progress. Leave auto wherever possible.


config.lua
Config.Production.command = 'stickers'
Config.Production.useCommand = 'usesticker'
Config.Production.removeCommand = 'removesticker'
Config.Production.mechanicCommand = 'stickerwork'
Config.Production.stationInteraction = 'target' -- target | prompt | both

With no working target provider, the kiosk falls back to the Press E prompt. prompt always uses that interaction; both offers target and prompt together.

config.lua โ€” pricing blocks
Config.Production.designing = {
price = 500,
updatePrice = 100,
}
Config.Production.printing = {
price = 250,
moneyAccount = 'cash',
material = '',
materialCount = 1,
}
SettingDefaultWhat it controls
designing.price500First publication of a new design; saving drafts is free
designing.updatePrice100Publishing an updated version of an existing design
printing.price250Price per printed copy
printing.moneyAccount'cash'Framework money account used for charges
printing.material''Optional material item, such as 'vinyl_sheet'
printing.materialCount1Material consumed per printed copy when material is configured
config.lua โ€” creation block
Config.Production.creation = {
authors = 'anyone', -- anyone | jobs
jobs = { mechanic = 0 },
requireDuty = true,
applyRequires = 'possession', -- possession | provenance
enforceExisting = false,
stockAllowed = true,
}

authors = 'jobs' restricts creation and printing to configured jobs. applyRequires = 'provenance' requires an authorized job to have published or applied the printed sticker. The admin panel can override selected creation rules at runtime.

config.lua โ€” persistence fields
Config.Persistence.enabled = true
Config.Persistence.requireDriver = true
Config.Persistence.onFootEditDistance = 6.0
Config.Persistence.autoHydrate = true
Config.Persistence.nearbyHydrate = true

Direct vehicle ownership is checked server-side. The configured on-foot distance allows the directly verified owner to work near their vehicle when using a printed sticker. Garage hydration can restore saved artwork without modifying the frameworkโ€™s owned-vehicle tables.

config.lua โ€” kiosk fields
Config.Production.kiosk.enabled = true
Config.Production.kiosk.model = 'rs_vehicle_sticker_kiosk'
Config.Production.kiosk.placement.command = 'decalkioskplace'
Config.Production.kiosk.calibration.command = 'decalkioskcalibrate'
Config.Production.stations = {}

An empty stations table is normal: administrators place persistent kiosks in-game. You can also define static stations with unique IDs. Screen calibration is saved separately for each workstation.

config.lua โ€” selected defaults
Config.Stickers.maxActive = 24
Config.Canvas.maxWidth = 2048
Config.Canvas.maxHeight = 2048
Config.Canvas.maxPixels = 2 * 1024 * 1024
Config.Observer.maxTrackedVehicles = 20
Config.Observer.renderDistance = 110.0

These limits balance canvas size, visible sticker count, nearby vehicles, and performance. Increasing them can add significant client rendering and memory costs.

config.lua โ€” example allowlist
Config.Images = {
allowedImageHosts = { 'i.ibb.co', 'cdn.yourserver.example' },
}

By default, image restrictions inherit from Config.Observer, whose HTTPS host allowlist includes i.ibb.co. Add your own trusted CDN host for remotely loaded artwork. Unsupported or blocked URLs may fail during publication or rendering.

config.lua โ€” optional shop example
Config.Production.shops = {
{
id = 'bennys',
coords = { x = -211.0, y = -1324.0, z = 30.9 },
radius = 12.0,
jobs = { mechanic = 0 },
requireDuty = true,
price = 0,
},
}

No mechanic shops are enabled by default (shops = {}). Authorized mechanics can provide services at a configured shop; working on a customerโ€™s car requires the ownerโ€™s temporary approval.

config.lua โ€” group defaults
Config.Production.gangs.enabled = true
Config.Production.gangs.maxDesigns = 10
Config.Production.gangs.leaderGrade = false
Config.Production.jobStickers.enabled = true
Config.Production.jobStickers.requireDuty = true
Config.Production.jobStickers.maxDesigns = 6
Config.Production.jobStickers.authors = 'leaders'
  • Gangs: Gang leaders publish artwork; members print and apply it under server-side membership rules. Qbox and QBCore gangs are supported; ESX/other gang systems use bridge/gang_server.lua.
  • Jobs: Templates are available for configured jobs (including police, ambulance, and taxi). Placeholders include {rank}, {lastname}, {callsign}, and {phone}. External call sign and phone sources need bridge/job_server.lua.

Job-specific vehicle models, grades, emblems, duty settings, and fees are all configurable in Config.Production.jobStickers.

config.lua โ€” selected defaults
Config.LiveView.enabled = true
Config.LiveView.kiosk.enabled = true
Config.LiveView.kiosk.library = 'full' -- full | names | hidden
Config.LiveView.kiosk.inventory = 'hidden'
Config.LiveView.vehicle.enabled = true
Config.LiveView.vehicle.enterDistance = 40.0
Config.LiveView.vehicle.leaveDistance = 55.0

Nearby spectators can see a read-only mirror of kiosk activity and vehicle sticker placement. Use names or hidden for Config.LiveView.kiosk.library when player artwork should not be visible to bystanders.

server.cfg โ€” server only
set rs_vehicle_decal_webhook "YOUR_DISCORD_WEBHOOK_URL"

With Config.Production.discord.enabled = 'auto', a valid webhook convar enables notification delivery. Keep the webhook server-side and avoid setr.