For the complete documentation index, see llms.txt. This page is also available as Markdown.

Configuration

Everything lives in rm_decalv/cfg.lua (open file, comments included) and rm_decalv/decals.lua (the catalog, covered on Adding decals). The important knobs, in the order they appear:

Updating from an older version? The config was reorganized into groups in 3.3.0, but every key from older configs (cfg.disableVehicleStickers, cfg.renderDistance, cfg.interfaceSettings, cfg.limits.maxSize, ...) keeps working unchanged — and when both spellings exist, the old one wins. You do not need to touch an existing cfg.lua.

Locale & bridges

cfg.locale = 'en'          -- locales/<locale>.json
cfg.bridge = {
    framework = 'auto',    -- 'auto' | 'qb' | 'esx'
    notification = 'ox_lib', -- any file name from bridge/notification/
}
cfg.nui = { primaryColor = '#f15d38' } -- accent color of the whole interface

Every notification adapter is an open file in rm_decalv/bridge/notification/ and its file name is the value for cfg.bridge.notification; the annotation in cfg.lua lists the set bundled with your version. Copy an adapter to integrate a resource we don't cover.

Placement ranges

cfg.placement = {
    minSize = 0.5,     -- sliders and ctrl+scroll offer this range...
    maxSize = 5.0,
    sizeStep = 0.5,
    minOpacity = 0.4,  -- lowest opacity players can pick (0.4 = 40%)
}

The server enforces the same ranges on save, so this block is the single source of truth; there is no separate server-side size cap to keep in sync.

Feature toggles

Rendering

occlusionCulling keeps the live decal load low by releasing decals that are off screen or blocked from view for a few seconds; they return as soon as they are visible again. It ships enabled; set it to false if you suspect it in a visual issue.

Zones & model rules

  • cfg.restrictedZones: decals can't be placed inside these (admins bypass). Every attempt fires the onRestrictedAttempt hook, see Events & Exports.

  • cfg.blacklistModels: stickers can never go on these vehicle models (emergency fleet by default). To reserve models for a faction instead, use vehicleModels on a catalog block, see Adding decals. Unoptimized vehicle models that overload the decal engine also belong here: the mesh probe finds them for you and prints ready-to-paste lines.

Both zone lists (cfg.restrictedZones and cfg.vehicleOwnerCheck.bypassZones below) accept spheres plus the parameter shapes of ox_lib zones and PolyZone, so definitions you already have paste over unchanged:

The checks run server side with the resource's own math; neither ox_lib zones nor PolyZone needs to be installed for this.

Entry points

Permissions & protection

bypassZones is how tuning shops work on customer cars: inside the area the ownership check is skipped for everyone, or only for the listed jobs/gangs.

Server-side limits

These are enforced on the server no matter what a client sends. Decal size and opacity limits live in cfg.placement at the top of the file; the interface and the server validation share them.

Editor fonts

cfg.editorFonts lists the fonts offered by the admin decal editor's text tool. They load at runtime; nothing ships in the resource. Both forms work, and name must match the font's real family name:

Advanced

A few optional keys exist for fine-tuning; the defaults suit most servers, add them only if you need them:

Raising maxImageUrlBytes also moves the editor save ceiling to match, so a large imported layer can still bake and save. Saved decals stay small regardless of import size, because the editor export is capped and re-encoded.

Last updated