Custom Car Stickers
This page documents the intended integration surface. Use the supplied client/server exports and editable bridge/*.lua adapters. Internal NUI callbacks, database events, and production RPCs are not public APIs.
Client Exports
Section titled “Client Exports”OpenStickerPrinter
Section titled “OpenStickerPrinter”Opens the sticker library in the context of a printer station.
exports['rs_car_stickers']:OpenStickerPrinter(stationId)OpenStickerPlacement and OpenStickerRemoval
Section titled “OpenStickerPlacement and OpenStickerRemoval”Open the printed-item placement or sticker-removal UI for a local vehicle entity.
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
exports['rs_car_stickers']:OpenStickerPlacement(vehicle)-- orexports['rs_car_stickers']:OpenStickerRemoval(vehicle)The target resource may launch these flows, but the server rechecks ownership, inventory, distance, and applicable permissions before committing changes.
OpenMechanicStickers
Section titled “OpenMechanicStickers”Starts a mechanic interaction at a configured shop.
exports['rs_car_stickers']:OpenMechanicStickers(vehicle, shopId, 'place')-- operation: 'place' or 'remove'NotifyVehicleRepaired
Section titled “NotifyVehicleRepaired”Tell the client that another resource has completed a repair which could clear decal projections.
-- Call after your repair native has finished.exports['rs_car_stickers']:NotifyVehicleRepaired(vehicle, 'custom repair completed')The script also has automatic repair recovery and optional event bridges; notifying it explicitly can shorten the visible restoration delay.
Server Exports
Section titled “Server Exports”Garage Integration
Section titled “Garage Integration”Custom garage scripts can announce a spawned owned vehicle and plate changes.
-- In your server-side garage adapter, after the vehicle exists:exports['rs_car_stickers']:VehicleSpawned(vehicle)
-- After an authorized plate update:exports['rs_car_stickers']:PlateChanged(oldPlate, newPlate)See bridge/garage_server.lua and bridge/garage_client.lua for additional reference forms and client-created vehicle handling.
Gang Vehicle Integration
Section titled “Gang Vehicle Integration”exports['rs_car_stickers']:MarkGangVehicle(vehicle, 'ballas', 'garage-car-1')exports['rs_car_stickers']:UnmarkGangVehicle(vehicle)exports['rs_car_stickers']:PlayerGangChanged(source)Job Vehicle Integration
Section titled “Job Vehicle Integration”exports['rs_car_stickers']:MarkJobVehicle(vehicle, 'police', source)exports['rs_car_stickers']:UnmarkJobVehicle(vehicle)exports['rs_car_stickers']:PlayerJobChanged(source)Use the corresponding functions in bridge/gang_server.lua or bridge/job_server.lua if your resource requires custom gang or job detection. Qbox and QBCore gang data and standard framework jobs work without a custom adapter in most installs.
Custom Integration Bridges
Section titled “Custom Integration Bridges”| File | Integrate when |
|---|---|
bridge/garage_server.lua | A custom garage manages vehicle ownership, spawn events, or plate changes |
bridge/garage_client.lua | Your garage creates a networked vehicle from the client |
bridge/gang_server.lua | You use ESX gangs, a nonstandard gang framework, or gang garages |
bridge/job_server.lua | Call signs, phone numbers, custom duty states, multi-jobs, or job garages are managed elsewhere |
Custom production providers can be registered in Config.Production.adapters: player, inventory, and money. These adapters must return confirmed results and preserve the printed item serial/metadata. Consult PRODUCTION_GUIDE.md inside the resource for their exact (method, source, payload) contract.
Commands
Section titled “Commands”| Command | Access | Purpose |
|---|---|---|
/stickers | Player | Open sticker library; design/print at an available workstation |
/usesticker | Player | Apply a printed sticker to an eligible parked vehicle |
/removesticker | Player | Remove a selected sticker with the scraper |
/stickerwork | Authorized mechanic | Offer sticker services at a configured shop |
/decaladmin | Staff ACE | Open management and moderation panel |
/decalkioskplace | Staff ACE | Place a persistent kiosk |
/decalkioskcalibrate | Staff ACE | Align a kiosk’s interactive screen |
/decalgarage | Staff ACE or console | Inspect garage restore issues |
/decalops | Staff ACE or console | Review incomplete payment, inventory, or save operations |
/decalgangcar | Staff ACE | Designate a vehicle as a gang car for testing/administration |
decalban, decalunban, decalbanstatus | Ban ACE or console | Manage player sticker restrictions |
Admin ACE Permissions
Section titled “Admin ACE Permissions”add_ace group.admin command.decaladmin allowadd_ace group.admin rs_vehicle_decal.admin.ban allowThe ban ACE is intentionally separate from ordinary admin-panel access. The admin panel may still be opened without permission to ban a player.
Operations Review
Section titled “Operations Review”decalopsdecalops show <operation-id>decalops refund <operation-id>decalops resolve <operation-id>decalops webhooksLegacy Editor and Diagnostics
Section titled “Legacy Editor and Diagnostics”When Config.Production.enabled = false, the legacy vehicle editor (/vehdecal) is available instead of the physical production workflow. Additional diagnostic commands include /vehdecalstatus, /vehdecalobserverstatus, and /vehdecalrestore.
Use legacy editing mode only intentionally; it follows a different policy from the printed-item economy.