Configuration
All configuration lives in bablo-racing/config.lua. The file is not escrowed and is fully editable. Below is a reference for every section.
Changes to config.lua require a resource restart to take effect (restart bablo-racing in the console).
Debug
Config.Debug = false -- Enable race debug tools (visible waypoints, console output)
Config.LogLevel = 'debug' -- Log verbosity: debug | trace | warn | errorGeneral
Config.General.OpenByCommand = false -- true = players can open the app via keybind without an item
Config.General.OpenKey = 'F5' -- Keybind used when OpenByCommand is true
Config.General.VehicleImagesUrl = 'https://assets.example.com/vehicles/{car}.png'
Config.General.Tablet = `imp_prop_impexp_tablet` -- Prop model used as the physical tabletVehicleImagesUrl controls the images shown in the vehicle picker. Replace {car} with your asset CDN path — the resource substitutes the vehicle model name automatically.
Profiles
Config.Profiles.AllowCustomImages = false -- Let players set a custom profile picture URL
Config.Profiles.AllowAllDomains = true -- Allow any image domain
Config.Profiles.AllowedDomains = { "imgur.com", "discordapp.com" } -- Only used when AllowAllDomains = false
Config.Profiles.AllowAllSizes = true -- Allow images of any size
Config.Profiles.StartingElo = 500 -- ELO new players start with
Config.Profiles.AllowAvatars = true -- Let players pick a generated avatar
Config.Profiles.AvatarTypes = { "avataaars-neutral", "pixel-art", "fun-emoji" }Supported avatar styles:
pixel-art— Pixel Art Neutral (opens in a new tab)fun-emoji— Fun Emoji (opens in a new tab)avataaars-neutral— Avataaars Neutral (opens in a new tab)
Crews
Config.Crews.MemberCap = nil -- nil = no cap, or set a number e.g. 10
Config.Crews.AllowCustomImages = false
Config.Crews.AllowAllDomains = true
Config.Crews.AllowAvatars = false
Config.Crews.AvatarTypes = { "avataaars-neutral", "pixel-art" }Track Builder
Config.Trackbuilder.AllowCreation = true -- Allow all players to create tracks
Config.Trackbuilder.AcePermission = "streetrace.trackbuilder" -- ACE required when AllowCreation = false
Config.Trackbuilder.MaxCheckpoints = 99
Config.Trackbuilder.MinCheckpoints = 2
Config.Trackbuilder.CheckpointModel = "prop_offroad_tyres02" -- Checkpoint prop
Config.Trackbuilder.StartpointModel = "prop_offroad_tyres01" -- Start/finish prop
Config.Trackbuilder.DistanceBetweenCheckpoints = 20.0 -- Minimum metres between checkpoints
Config.Trackbuilder.CircuitMinimumDistanceBetweenFirstAndLastCheckpoint = 30.0To restrict track creation to admins only, set AllowCreation = false and grant the ACE permission in your server config:
add_ace group.admin streetrace.trackbuilder allowRaces
Config.Races.DefaultTracks = true -- Seed built-in tracks on first boot
Config.Races.MobilizeTimer = 10000 -- ms to prepare before countdown (default 10s)
Config.Races.CountdownTimer = 3000 -- ms for the countdown sequence (default 3s)
Config.Races.ToggleVehicleDrift = true -- Apply drift tyres during races
Config.Races.FreezeDuringCountdown = true
Config.Races.MinCrewSize = 2 -- Min players per team in a crew lobby
Config.Races.AllowUnevenCrewSize = false
Config.Races.StartRadius = 100.00 -- metres: all players must be within this radius to start
Config.Races.RequirePlayersInStartRadius = true
Config.Races.RequiredParticipantsForRankedLobby = 4
Config.Races.Deadline = 60000 -- ms after first finish before lobby auto-closes
Config.Races.FinishedLobbyVisibilityTime = 300000 -- ms a finished lobby stays in the listWager currencies
Config.Races.WagerCurrencies = {
'money',
-- 'crypto' -- uncomment to allow crypto wagers
}Add the matching payout logic in Config.Rewards for any currency you enable here.
Ghost mode
Config.Races.Ghostmode = {
distance = 20.0, -- metres between cars before ghosting activates
alpha = 200, -- 0 (invisible) to 255 (opaque)
scanInterval = 100 -- ms between distance scans (lower = more responsive, more CPU)
}Gather smoke
Config.Races.GatherSmoke = {
scale = 1.0,
rgb = { r = 0.0, g = 0.0, b = 255.0 } -- colour of start-line smoke
}Sounds
Config.Races.Sounds = {
Start = { name = 'GO_NON_RACE', set = 'HUD_MINI_GAME_SOUNDSET' },
Checkpoint = { name = 'RACE_PLACED', set = 'HUD_AWARDS' },
DNF = { name = 'FLIGHT_SCHOOL_LESSON_PASSED', set = 'HUD_AWARDS' },
Finish = { name = 'FLIGHT_SCHOOL_LESSON_PASSED', set = 'HUD_AWARDS' },
}Road cleanup
Config.Races.Cleanup.Enable = true -- Remove dumpsters, bins etc. that are on the trackThe OnRoadModels and BlacklistedModels tables control which props are removed or protected.
Events
Config.Events.AllowCreation = true -- Allow all players to create events
Config.Events.AcePermission = "streetrace.events" -- ACE required when AllowCreation = falseUI
Config.UI.Colors = {
Primary = "#3C83F6", -- Main accent (buttons, highlights)
PrimaryLight = "#6BA3F9", -- Hover states, borders
PrimaryDark = "#2E6FDE", -- Progress bars, emphasis
Secondary = "#415A77", -- Cancel buttons, disabled states
SecondaryHover = "#344E6B",
}
Config.UI.RouteColor = 12 -- GPS route colour (66 = yellow, 5 = lime green)Environment
Config.Env.AutoRepairDB = true -- Auto-create/repair missing DB tables on start (recommended)
Config.Env.Framework = "auto" -- auto | esx | qb | qbox | ox | vrp2 | standalone
Config.Env.Inventory = "auto" -- auto | ox_inventory | qb-inventory | lj-inventory | mf-inventory | codem-inventory | core_inventory | tprp_inventoryVehicles
Config.Vehicles.Classes = { 'D', 'C', 'B', 'A', 'S', 'S+', 'M-', 'M', 'M+' }The Get function returns the class for a given vehicle hash. By default it returns 'All' (no class restriction). Replace with your own logic to pull class from a vehicle database:
Config.Vehicles.Classes.Get = function(hash)
local vehicleData = exports['my-cardealer']:GetVehicleDataByHash(hash)
if not vehicleData then return nil end
return vehicleData.class
endThe IsBlackListed function lets you prevent specific vehicles from joining lobbies:
Config.Vehicles.Classes.IsBlackListed = function(hash)
return GetDisplayNameFromVehicleModel(hash) == "oppressor2"
endRewards
Config.Rewards.Winners = 3 -- Top X players share the wager payout
Config.Rewards.DefaultCurrency = "money"
Config.Rewards.Xp = {
participant = 2,
topX = 5,
winner = 10
}Race payout (cash)
Edit Config.Rewards.RacePayout to control how much money is awarded per finish position:
Config.Rewards.RacePayout = function(source, status)
if status == 'winner' then
return 100
elseif status == 'topX' then
return 50
else
return 5 -- participant
end
endLoot table (items)
Edit Config.Rewards.Loottable to give items on finish. Return nil to give nothing:
Config.Rewards.Loottable = function(source, status)
if status == 'winner' then
return {
{ item = 'repairkit', metadata = { ignoreChecks = true }, amount = 1 }
}
end
return nil
endELO Ranks
Each rank entry defines the ELO range and optional rewards for reaching that rank:
Config.ELO.Ranks = {
{ name = 'Rookie', min = 0, max = 999, rewards = nil },
{ name = 'Amateur', min = 1000, max = 1999, rewards = { { type = "money", amount = 250 } } },
-- ...
{ name = 'Apex', min = 9000, max = 10000, rewards = {
{ type = 'item', item = 'furniture', metadata = { model = 'm25_2_prop_m52_trpy_100races' }, amount = 1 },
{ type = "money", amount = 1500 }
}},
}rewards is paid out once when a player first reaches that rank tier. Set to nil for no reward.