All server-side settings live in config/main.lua. Per-zone behaviour (weapons, vehicles, blips, job whitelist) is set in the admin UI and stored in data/zones.json.
Open the file in an editor and change only what you need — this page is the short version.
Setup#
setup = {
debug = 1, -- 1 = errors only; higher = more console output
checkVersion = true,
notify = 'auto', -- or ox_lib, lt-ui, esx_notify, qb-notify, etc.
},
| Option | What it does |
|---|---|
debug | Console noise. Use 1 on a live server unless you are troubleshooting. |
checkVersion | Warns if a newer release exists on startup. |
notify | Notify backend when customNotifications = false. See values below. |
Supported setup.notify values: auto, ox_lib, lt-ui, esx_notify, okokNotify, pNotify, mythic_notify, brutal_notify, wasabi_notify, origen_notify, lation_ui, qb-notify. With auto, the first running compatible resource is used.
General#
| Option | Default | Notes |
|---|---|---|
locale | 'en' | Also: tr, de, fr, es, pt-br, pl, ru, it — files in locales/ |
command | 'safezonecreator' | Chat command for the admin menu |
ace | 'command.safezone' | ACE permission for zone management (see Installation) |
Notifications#
notifications = {
enabled = true,
customNotifications = true,
},
| Option | What it does |
|---|---|
enabled | Master switch for enter/leave feedback |
customNotifications | true = on-screen NUI banner while inside a zone; false = standard notify toasts via LT.Notify |
Per-zone Notification in the editor still controls whether that zone triggers enter/leave messages at all.
With customNotifications = true, players see the zone name in the UI overlay. With false, they get classic notify popups when notification is enabled on the zone.
Safezone performance#
These values tune how often the client scans entities near zones. Lower milliseconds = more responsive, slightly heavier.
safezone = {
healIntervalMs = 5000,
zoneScanMargin = 80.0,
vehicleScanMs = 1000,
pedCollisionMs = 50,
vehicleCollisionMs = 50,
},
| Option | What it does |
|---|---|
healIntervalMs | Tick interval for Heal Over Time |
zoneScanMargin | Extra meters around the zone box before vehicle/ped scans |
vehicleScanMs | How often vehicles inside/near the zone get rule checks |
pedCollisionMs | Ped collision disable loop interval |
vehicleCollisionMs | Vehicle-vs-player collision disable interval |
If you run many large zones and notice client load, raise the *Ms values slightly instead of lowering them.
Ghost mode#
| Option | Default | Notes |
|---|---|---|
ghostedEntityAlpha | 100.0 | Transparency for ghost mode (SetGhostedEntityAlpha) |
UI — safezone warning#
When notifications.customNotifications = true, players see this NUI banner while inside a zone (zone name on screen).
ui = {
safezoneWarning = {
position = 'bottom', -- 'bottom' or 'top'
shadowsAndGlows = true,
shadow = 'rgba(87,166,255,0.5)',
accent = '#57A6FF',
logoGradient = { '#57A6FF', '#4c94e7' },
logoBorder = '0.75px solid #57A6FF',
textColor = 'rgba(255,255,255,0.85)',
},
},
| Option | What it does |
|---|---|
position | Banner at top or bottom of the screen |
shadowsAndGlows | Glow and shadow effects on logo and title |
shadow, accent, logoGradient, logoBorder, textColor | Colours (hex, rgb, or rgba) |
Preview & zone borders#
Freecam editor preview and in-game Show Zone Borders drawing use preview in config:
preview = {
validColour = vec3(0, 255, 0),
invalidColour = vec3(255, 0, 0),
wallAlphaPreview = 50,
lineAlphaPreview = 50,
wallWidth = 0.3,
maxDistance = 350.0,
wallAlphaInGame = 15,
lineAlphaInGame = 15,
},
| Option | Default | What it does |
|---|---|---|
validColour / invalidColour | green / red | Polygon preview when points are valid vs crossing |
wallAlphaPreview / lineAlphaPreview | 50 | Alpha while placing points in freecam |
wallWidth | 0.3 | Wall thickness inward (meters) |
maxDistance | 125.0 | Max distance (meters) to draw borders when Show Zone Borders is on |
wallAlphaInGame / lineAlphaInGame | 15 | Alpha for borders drawn in the world |
Borders only show when the zone has Show Zone Borders enabled and you are within preview.maxDistance.
Disarming players#
When Disable Firearms is on, the script calls disarmPlayer from config:
disarmPlayer = function()
local inventory = LT.Inventory.GetResource()
if inventory == 'ox_inventory' then
TriggerEvent('ox_inventory:disarm', PlayerId())
else
SetCurrentPedWeapon(cache.ped, `WEAPON_UNARMED`, true)
end
end,
Extend this if you use another inventory — match the pattern in config/main.lua comments.
Freecam (editor)#
freecam = {
speed = 1.15,
fov = 50.0,
lookSens = 5.0,
raycastDist = 500.0,
thicknessStep = 1.0,
thicknessMin = 1.0,
thicknessMax = 100.0,
baseZStep = 0.5,
},
Controls how the point-placement camera feels. Most servers can leave defaults; see Editor for in-game keys.
Per-zone settings (admin UI)#
Each zone stores its own rules. Whitelisted jobs (see below) skip restrictions for that zone.
Combat & weapons#
| Setting | Effect |
|---|---|
| Disable Shooting | Blocks firing |
| Disable Melee | Blocks melee |
| Disable Firearms | Disarms via disarmPlayer |
| Disable Drive-By | No drive-by shooting |
Movement#
| Setting | Effect |
|---|---|
| Disable Jumping | Jump control disabled |
| Disable Running | Walk only |
Player#
| Setting | Effect |
|---|---|
| Invincible Players | Ped cannot take damage |
| Ghost Mode | Local ghost, no collision with others |
| Heal On Enter | Full health once on entry |
| Heal Over Time | Full health on interval (healIntervalMs) |
| Disable Ragdoll | No ragdoll |
| Disable Ped Collision | No collision with other peds/vehicles nearby |
| Disable Idle Cam | Idle camera off |
| Quiet Footsteps | Reduced footstep volume |
| Notification | Enter/leave messages for this zone |
Vehicles#
| Setting | Effect |
|---|---|
| Speed Limit (km/h) | Caps vehicle speed in zone |
| Invincible Vehicles | Vehicles cannot be damaged |
| Lock Vehicle Doors | Doors locked while inside |
| Disable Vehicle Collision | Vehicle-to-vehicle collision off |
Whitelisted players driving their own vehicle are exempt from vehicle limits.
Map#
| Setting | Effect |
|---|---|
| Show Zone Borders | Polygon outline in the world (within preview.maxDistance) |
| Blip | Optional map blip (sprite, colour, scale, short range) |
Job whitelist#
Enable Job Whitelist, add jobs with a minimum grade. Matching players are treated as whitelisted inside that zone — combat, movement, and vehicle rules do not apply to them (their own vehicle is also exempt from vehicle limits).
Job names must match your framework (police, ambulance, etc.).
Locales#
Set locale = 'en' (or another code). Edit strings in locales/*.json. UI labels for zone settings live under ui.settings in those files.