Bablo ResourcesDocs

Configuration

All configuration lives in config.lua. Staff, ranks, zones, blips, events, the whitelist and most day-to-day settings are managed in the panel and saved to the database, so this file only holds the server-wide defaults.

Changes to config.lua need a resource restart to take effect (restart bablo-admin in the console).

config.lua is a shared file, so it is sent to every player. Never put a secret in it (API keys, bot tokens, TURN passwords). Secrets go in server.cfg as convars, see Installation.


Debug

LUA
Config.DEBUG = true

Turns on extra console logging. While it is on, staff can also ban themselves (useful to test the ban screen) and the /demovehicles command exists (see Commands).

Set Config.DEBUG = false on a live server.


Framework

LUA
Config.Framework = "auto" -- auto | qbcore | esx | qbox

auto checks for es_extended, then qbx_core, then qb-core, and waits up to 5 seconds for one of them to start. Force a value only if detection picks the wrong one.


Server language

LUA
Config.Locale = "en"

The language players see, loaded from locales/<locale>.json (en and sv ship with the resource). Staff can pick their own language in the panel. See Languages for how to add one.


Inventory

LUA
Config.Inventory = 'auto'

The inventory resource items are given, removed and viewed through. auto uses the first started one of: ox_inventory, qb-inventory, ps-inventory, codem-inventory, core_inventory, origen_inventory, tgiann-inventory. Set one of those names to force it.


Notifications

LUA
Config.Notifications = 'inbuilt' -- inbuilt | ox_lib | framework | custom

Used for the in-game notifications: report alerts, jail, zones, vehicle wipe warnings and the admin menu’s own messages.

ValueUses
inbuiltThe admin menu’s own notifications. Each staff member picks the position, sounds and which alerts they get in Settings → Alerts & sounds.
ox_liblib.notify
frameworkYour framework’s notify (QBCore, Qbox or ESX)
customConfig.CustomNotify below

Positions, sounds and per-staff alert settings only apply to inbuilt.

LUA
-- Config.CustomNotify = function(data)
--     exports['okokNotify']:Alert(data.title, data.body, data.duration, data.kind)
-- end

Only used with Config.Notifications = 'custom'. It runs on the client and gets one table: { kind = 'success' | 'error' | 'info', title = string, body = string, duration = milliseconds }. If it is missing or throws an error, the built-in notification is shown instead.


Currency

LUA
Config.Currency = {
    pattern   = '$ %s',
    thousands = ',',
    account   = 'bank', -- cash | bank
}

How money is shown in the panel (player money, transactions, statistics). pattern uses %s as the number placeholder and thousands is the separator between groups of three digits. account is not used by any screen in the current version.


Admin command

LUA
Config.Command = 'admin'
 
Config.OpenKey = 'F9'
 
Config.NoClipCommand = 'noclip'

Config.Command is the chat command that opens the admin panel. Only staff can open it. See Commands.

Config.OpenKey is the default key that opens it. Every player can change it under Settings → Key Bindings → FiveM → Open admin menu, and the key does nothing for players who aren’t staff. Set it to '' to have no default key. A player’s own choice is kept, so a new default only applies to players who never changed it.

Config.NoClipCommand is a chat command that turns noclip on or off, the same as the quick menu toggle. It only works for staff with the Quick Menu permission. Set it to '' to have no command.

The same list has a key for each quick menu toggle: noclip, freecam, god mode, invisible, player names, player blips, staff tag, coordinates, night and thermal vision, head light, super jump, infinite stamina, fast run, no ragdoll and global voice. They have no default key, so each staff member binds the ones they use. The keys do nothing for players who aren’t staff.


Staff access

Staff members and their ranks live in the database. The tables and the default ranks (Owner, Admin, Moderator, Support) are created on first start. Manage them on the Staff page or from the server console. See Staff & Ranks.

LUA
Config.Owners = {
    -- 'fivem:123456',
    -- 'discord:123456789012345678',
}

Players listed here always have full access and are added to the top rank when they join. Any identifier works: license:, license2:, discord:, fivem:, steam:. An owner listed with a discord: identifier can also sign in to the web panel and use the Discord bot.

LUA
Config.OwnerAce = 'bablo-admin.owner'

Players with this ACE are treated like Config.Owners in game. Example for server.cfg:

BASH
add_ace group.admin bablo-admin.owner allow
LUA
Config.FirstAdminSetup = true

While nobody is staff yet, the first server admin who runs /admin becomes the first Owner. A server admin is anyone with the command ACE (txAdmin admins have it), a QBCore god or admin, an ESX admin or superadmin, or a Qbox admin. Set it to false to only allow Config.Owners, Config.OwnerAce and the console command.

LUA
Config.ConsoleCommand = 'babloadmin'

The server console command for staff management. See Commands.

Discord profile pictures

Staff with a Discord identifier show their Discord picture. It is fetched each time they join and saved. This needs a Discord bot token in server.cfg (any bot works, it does not have to be in your Discord server):

BASH
set bablo_admin_discord_token "your bot token"

Without a token, staff show Discord’s default avatar. See Your Own Discord Bot for how to create one.

ACE mirroring

Ranks can give ACEs and commands (the Advanced ACE rules in the rank editor). For that the resource must be allowed to change ACEs. Add these lines to server.cfg:

BASH
add_ace resource.bablo-admin command.add_ace allow
add_ace resource.bablo-admin command.remove_ace allow
add_ace resource.bablo-admin command.add_principal allow
add_ace resource.bablo-admin command.remove_principal allow

See Staff & Ranks.


Weather and time

LUA
Config.WorldSync = 'auto'

Weather and time shown and set on the dashboard.

ValueBehavior
autoUses qb-weathersync when it runs. If cd_easytime, vSync, Renewed-Weathersync, av_weather or qbx_weathersync runs instead, weather and time show as unavailable. Otherwise bablo-admin runs them itself.
qb-weathersyncAlways goes through qb-weathersync.
builtinbablo-admin syncs weather and time to every player.
offWeather and time are not shown or changed.

Server tick times

LUA
-- Config.PerfUrl = 'http://127.0.0.1:30120/perf/'

The dashboard reads server tick times from FXServer’s /perf/ page. It tries your server’s port and 30120 on its own. Only set this when the console prints that the tick times could not be read.


Zones

LUA
Config.Zones = {
    SpeedUnit = 'kmh',
}

SpeedUnit is the unit of a zone’s speed limit: kmh or mph. Zone behaviors (disable weapons, speed limit, freeze, announce entry, keep players out) are switched on per zone in the zone editor on the Map page. A zone can also name a custom handler that other resources react to, see State Bags, Exports & Events.


Event announcements

LUA
Config.EventAnnouncements = true

Server events planned in the panel are announced to every player with a banner at the top of the screen when they start. How long the banner stays is set per event (“Show on screen”). Set to false to never show it.


Reports

LUA
Config.Reports = true
Config.ReportCommand = 'report'

/report opens the player’s report window, /report <message> sends a report straight away. Staff answer under Reports in the panel. Set Config.Reports = false to turn reports off (the command is then not registered). See Reports & Media.


UI preview

LUA
Config.UIPreview = true

true makes screens that are not connected to the server yet show built-in demo data in game (staff, permissions and your own session are always real), and enables the hidden /admin probe blur diagnostic. Set it to false once every screen you use is connected.


Remote spectate

LUA
Config.Spectate = {
    MaxFeeds = 4,
    Fps = 30,
    Resolution = 720,
    IceServers = { 'stun:stun.l.google.com:19302', 'stun:stun1.l.google.com:19302' },
}

Used by Monitoring, the report live preview and Remote in Players: the watched player’s game view is streamed to the staff member’s panel.

OptionDescription
MaxFeedsHow many feeds one staff member can watch at once
FpsCapture rate on the watched player’s game
ResolutionHeight of the streamed picture: 480, 720, 1080 or 1440. Higher looks sharper but costs the watched player more and roughly doubles the data per step, which matters when feeds go through a TURN relay.
IceServersPublic STUN servers used to connect the two players

If feeds stay black for players behind strict routers, add a TURN relay. TURN is set only with convars in server.cfg (bablo_admin_turn_key_id + bablo_admin_turn_api_token for Cloudflare, or bablo_admin_turn_urls + bablo_admin_turn_username + bablo_admin_turn_credential for your own), never here. See TURN server.


Moderation

LUA
Config.Moderation = {
    BanTokens = true,
    WarningHoldSeconds = 5,
    Appeals = true,
    AppealCooldownHours = 24,
    Flags = {
        { id = 'streamer', label = 'Streamer', colour = '#b977ff' },
        { id = 'creator', label = 'Content Creator', colour = '#00d0ff' },
        { id = 'watchlist', label = 'Watchlist', colour = '#ff3a52' },
        { id = 'newPlayer', label = 'New Player', colour = '#57ff97' },
    },
    Jail = {
        Inside = vec4(1641.62, 2570.17, 45.56, 0.0),
        Release = vec4(1846.2, 2586.0, 45.67, 270.0),
        Radius = 140.0,
    },
}
OptionDescription
BanTokensAlso bans the player’s hardware tokens, so the same PC on a fresh account is refused. It can also catch people who share one computer.
WarningHoldSecondsA warned player holds SPACE this long to close the warning (1–30).
AppealsA banned player can write an appeal on the ban screen when they try to join. Staff answer it on the Moderation page (Appeals tab). Blacklisted players never get the appeal box.
AppealCooldownHoursHow long a player waits after a denied appeal before sending a new one.
FlagsThe flags staff can put on a player (shown in the player view). id is saved in the database, label and colour are what staff see.
Jail.Insidevec4 where jailed players are kept.
Jail.Releasevec4 where they are sent when their time is up.
Jail.RadiusHow far (metres) from Jail.Inside a jailed player can go.

Bans are matched against every identifier the player had when banned (license, discord, steam, fivem…). The IP is only added when staff tick Also ban IP address in the ban window. A jail survives a reconnect or a server restart.


Whitelist

LUA
Config.Whitelist = {
    Enabled = false,
    Requests = true,
    RequestCooldownHours = 24,
    ApplyUrl = '',
}
OptionDescription
EnabledOff by default: there is no Whitelist page and the list is never checked. Set it to true to add the page, then turn the whitelist itself on or off there (it stays off until you do).
RequestsA player who is not on the list can ask for access on the connect screen. Staff answer it on the Whitelist page.
RequestCooldownHoursHow long a player waits after a denied request before asking again.
ApplyUrlAdds an Apply button on that screen, for example your Discord invite or a form. Empty hides it.

Staff always get in, even when they are not on the list.


Community service

LUA
Config.CommunityService = {
    Center = vec4(195.17, -933.77, 30.69, 144.0),
    Radius = 55.0,
    Release = nil,
    TaskSeconds = 8,
    EscapePenalty = 2,
    Spots = {
        vec3(175.0, -943.0, 30.69),
        vec3(187.5, -951.0, 30.69),
        vec3(200.0, -958.0, 30.69),
        vec3(213.0, -946.0, 30.69),
        vec3(220.0, -930.0, 30.69),
        vec3(208.0, -915.0, 30.69),
        vec3(191.0, -906.0, 30.69),
        vec3(176.0, -915.0, 30.69),
        vec3(168.0, -930.0, 30.69),
        vec3(198.5, -934.5, 30.69),
    },
}

Staff give a player a number of tasks from the Jail button on a player (Community service tab). The player is sent to Center and walks to the marked Spots, pressing E to sweep each one.

OptionDescription
Centervec4 where the player is sent when the sentence starts (the 4th number is the heading).
RadiusLeaving this many metres around Center sends them back.
Releasevec4 where they go when they are done. nil = they stay where they are.
TaskSecondsHow long one sweep takes.
EscapePenaltyTasks added each time they leave the area.
Spotsvec3 places that can be marked for sweeping.

A sentence carries over a reconnect or a server restart.


Screenshots and clips

LUA
Config.Media = {
    Enabled = true,
    Provider = 'server',
    KeepDays = 30,
    MaxClipSeconds = 30,
    StopKey = 'F11',
}
OptionDescription
Enabledfalse turns off player clips and screenshots and staff screenshots.
Providerserver saves files in the media folder of the resource and needs no setup. fivemanage uploads them to fivemanage.com instead.
KeepDaysRemoves media older than this many days. 0 keeps everything.
MaxClipSecondsLongest clip a player can record (5–120).
StopKeyDefault key that stops a clip recording. Players can change it in their key bindings. '' for none (then only /report stops it).

fivemanage needs your API key in server.cfg: set bablo_admin_fivemanage_key "your key". Without it, clips and screenshots are unavailable.

See Reports & Media.


Database backups

LUA
Config.Backups = {
    Enabled = true,
    EveryHours = 168,
    Keep = 7,
}

Saves a full copy of the server database as a .sql.gz file in the backups folder of the resource.

OptionDescription
Enabledfalse turns the feature off completely.
EveryHoursHow often an automatic backup runs: 0, 6, 12, 24, 48, 168 (every week, the default) or 720 (every month). 0 = no automatic backups.
KeepHow many backup files are kept: 3, 5, 7, 14 or 30.

EveryHours and Keep are only the starting values. Once they are changed in Settings → Database backups, the panel values are used. See Database Backups.


Polls

LUA
Config.Polls = {
    Enabled = true,
    Command = 'poll',
}

Staff with the Polls permission start a poll from the Polls page. Every player gets a card in game and opens the poll with the command to vote. Set Enabled = false to turn polls off. See Reports & Media.


Ban screen

LUA
Config.BanScreen = {
    Card = true,
    ServerName = '',
    AppealUrl = '',
    LogoUrl = '',
    HoldSeconds = 300,
}

A styled card (a FiveM Adaptive Card) shown every time a banned player tries to join: reason, ban ID, who banned them, the date and when it runs out.

OptionDescription
Cardfalse shows the plain ban text instead.
ServerNameAn extra line above the title. Empty hides it (FiveM already shows the server name).
AppealUrlAdds an Appeal button to the card, for example your Discord invite.
LogoUrlShows your logo next to the title.
HoldSecondsThe card closes by itself after this many seconds.

A kicked or banned player leaves the server at once with a plain text message, because FiveM’s own “Disconnected” popup can only show plain text. The styled screen comes when they try to join again.


Kick screen

LUA
Config.KickScreen = {
    Card = true,
    Minutes = 10,
}

Shown once when a kicked player joins again within Minutes: reason, who kicked them and when, with Join server and Leave buttons. Card = false lets them straight back in. The card closes by itself after Config.BanScreen.HoldSeconds and then lets the player in.


Players tab bridges

LUA
Config.Appearance = 'auto'

The clothing resource behind Clothing (opens the player’s clothing menu) and Reload skin. auto picks the first one that runs: illenium-appearance, fivem-appearance, bl_appearance, crm-appearance, rcore_clothing, codem-appearance, tgiann-clothing, qb-clothing, esx_skin, skinchanger. Each one is a small file in src/appearances; copy one to add another resource.

LUA
Config.VehicleKeys = 'auto'

Key resource used when staff give keys or spawn a vehicle for a player: qbx_vehiclekeys, qb-vehiclekeys, wasabi_carlock, qs-vehiclekeys, Renewed-Vehiclekeys or cd_garage (files in src/vehiclekeys).

LUA
Config.Banking = 'auto'

Where the Transactions window reads a player’s bank history: bablo-banking, Renewed-Banking, okokBanking or qb-banking (files in src/banking).

If you force a bridge by name and that resource is not started, the feature is unavailable. A forced bridge never falls back to another one.


Sounds

LUA
Config.Sounds = {
    Announcement = { name = 'Event_Message_Purple', set = 'GTAO_FM_Events_Soundset' },
    Message = { name = 'Text_Arrive_Tone' },
    Warning = { name = 'Boss_Message_Orange', set = 'GTAO_Boss_Goons_FM_Soundset' },
}

GTA frontend sounds players hear for a staff announcement or event start (Announcement), a message from staff (Message) and a warning (Warning). Give the sound name and its set (leave set out for sounds without one). Set one to false to play nothing.


Give vehicle garage

LUA
Config.GiveVehicleGarage = { car = 'pillboxgarage', air = 'intairport', sea = 'lsymc' }

The garages that Give vehicle puts a new vehicle in on QBCore and Qbox. Helicopters and planes go to air, boats and submarines to sea, everything else to car. Use garage names from your garage script; the defaults exist in qb-garages and qbx_garages. On start the console warns if one of them doesn’t exist. A single name like 'pillboxgarage' still works and is used for every vehicle type.

Send to garage and Release from the impound also use these garages when a vehicle has no garage saved or still points at a depot.

Impound

LUA
Config.ImpoundLot = 'los_santos'

How Impound works depends on the framework:

FrameworkWith a feeWithout a fee
QBCore, QboxThe vehicle goes to the depot and the player pays the fee there to get it back.The vehicle is seized and stays locked until staff click Release.
ESX (esx_garage)The vehicle goes to the impound lot in Config.ImpoundLot. esx_garage charges its own lot fee, so the fee you enter is only kept in the note.Same.

Impound is not offered when jg-advancedgarages is running, or on ESX servers without esx_garage.


Vehicle pictures

LUA
Config.VehicleImageUrl = 'https://assets.babloresources.com/vehicles/%s.webp'

Pictures in the Vehicles tab, the player view and owned vehicles. Your own picture in images/vehicles, named after the spawn code (for example images/vehicles/sultanrs.webp; .png, .jpg and .gif work too), is used first and shows after a resource restart. Every other vehicle loads from this address, where %s is the spawn code in lower case (the same name in capitals is tried when that is missing). Set it to false to only use your own pictures.


Hidden vehicles

LUA
Config.HiddenVehicleCategories = { 'planes', 'helicopters', 'boats', 'military', 'industrial', 'openwheel' }
Config.HiddenVehicleModels = {
    'trailers5', 'tvtrailer2',
    'freight', 'metrotrain', 'cablecar',
    'polmav', 'predator', 'seashark2',
    'cerberus', 'phantom2', 'boxville5', 'oppressor', 'ruiner2', 'deluxo', 'stromberg', 'toreador', 'jb7002',
    'imperator', 'imperator2', 'imperator3', 'dominator4', 'impaler2', 'impaler3', 'impaler4',
    'issi4', 'issi5', 'issi6', 'deathbike', 'deathbike2', 'deathbike3',
}

Vehicles left out of the Vehicles tab. Categories are the framework vehicle categories (QBCore shared/vehicles.lua category), models are spawn codes. A vehicle a player owns is always listed, and hidden vehicles can still be spawned and given by spawn code. Use {} to list everything.


Quick menu

LUA
Config.QuickMenu = {
    Command = 'quickmenu',
    OpenKey = 'F10',
    CursorKey = 'ALT',
    FreezeKey = 'G',
    DeleteKey = 'DEL',
    InspectorRange = 50.0,
    StaffTagRange = 30.0,
    HealthBarColour = 18,
    NoclipSpeed = 50.0,
    NoclipFastSpeed = 240.0,
    NoclipInfoKey = 'H',
    DebugRange = 20.0,
    DebugLimit = 8,
}

The quick menu opens with the Open Quick Menu key from Settings → Keybinds (each staff member picks their own) or the command. Its toggles last for the session: leaving or a resource restart switches them all off.

OptionDescription
CommandCommand that opens and closes the quick menu
OpenKey / CursorKeyStarting keys before a staff member changes them in Settings (ALT, CTRL, SHIFT, F1–F12, A–Z, 0–9, INS, DEL, HOME, …)
FreezeKey / DeleteKeyKeys of the entity inspector (fixed for everyone)
InspectorRangeHow far the entity inspector reaches, in metres
StaffTagRangeHow close players must be to see a staff tag
HealthBarColourHUD colour index of the health bar on name tags (18 = green)
NoclipSpeedNoclip speed in metres per second
NoclipFastSpeedNoclip speed while SHIFT is held
NoclipInfoKeyShows or hides name, character and ID over players within 15 m while noclipping
DebugRangeHow far Vehicle Debug and Ped Debug look, in metres
DebugLimitMost debug cards shown at once, nearest first (1–8)

ALT is also the default key of ox_target, qb-target and the pma-voice radio, so servers using those may want another CursorKey. Blackout in the quick menu darkens the whole city and needs the World Control permission.


Teleport locations

LUA
-- Config.TeleportLocations = {
--     { id = 'legion', label = 'Legion Square', coords = vec4(195.17, -933.77, 29.7, 144.5) },
-- }

Places offered in the teleport window. Leave it commented out to use the built-in list (Legion Square, Pillbox, Mission Row, the airport, the Vinewood sign, Sandy Shores, Paleto Bay and Mount Chiliad). When you set it, your list replaces the built-in one.


Your own logos

The menu’s logos are two image files in the main bablo-admin folder, next to config.lua. Replace them with your server’s logo and restart the resource.

FileWhere it shows
logo_header.webpThe wide logo at the top left of the admin menu.
logo_icon.webpThe small logo when the menu is narrow, at the bottom of the quick menu, and printed on the clothing, inventory, routing bucket and message pictures in a player’s actions.

You can use .webp, .png, .jpg, .gif or .svg; keep the name, for example logo_icon.png. Logos are fitted into their spot without being cropped. Use a white or light logo on a transparent background: it sits on dark pictures. Delete a file to get the Bablo logo back.

The web panel shows your logos too. After you replace one, the web panel can take up to an hour to show the new picture.