Configuration
Complete configuration reference for nc-busjob. All settings are in shared/config.lua.
Framework
Config.Framework = 'auto' -- 'auto' | 'qb' | 'qbox' | 'esx' | 'ox'
Target System
Config.Target = 'auto' -- 'auto' | 'ox_target' | 'qb-target' | 'qtarget' | 'interact'
General
Config.Debug = false
Config.Locale = 'en'
Commands & Keybinds
Config.Commands = {
openRoutes = { name = 'busloop', description = '...', key = 'F7' },
cancelRoute = { name = 'buscancel', description = '...', key = '' },
}
Loop / Lap Settings
Config.Loop = {
maxLaps = 5, -- Maximum laps a player can select (1-10)
bonusMultiplier = 0.5, -- Extra completion bonus per additional lap (+50% per lap)
}
Time-Based Demand System
Dynamic multipliers based on in-game time of day. Affects passenger spawns, tip rates, and fare pricing.
Config.TimeDemand = {
enabled = true,
periods = {
{ name = 'morningRush', startHour = 7, endHour = 9, passengerMultiplier = 2.0, tipMultiplier = 1.5, fareMultiplier = 1.0 },
{ name = 'daytime', startHour = 9, endHour = 17, passengerMultiplier = 1.0, tipMultiplier = 1.0, fareMultiplier = 1.0 },
{ name = 'eveningRush', startHour = 17, endHour = 19, passengerMultiplier = 2.0, tipMultiplier = 1.5, fareMultiplier = 1.0 },
{ name = 'evening', startHour = 19, endHour = 22, passengerMultiplier = 1.2, tipMultiplier = 1.2, fareMultiplier = 1.0 },
{ name = 'lateNight', startHour = 22, endHour = 2, passengerMultiplier = 0.5, tipMultiplier = 1.8, fareMultiplier = 1.3 },
{ name = 'earlyMorning', startHour = 2, endHour = 7, passengerMultiplier = 0.3, tipMultiplier = 2.0, fareMultiplier = 1.3 },
},
weekend = {
enabled = true,
days = { 0, 6 }, -- 0 = Sunday, 6 = Saturday
passengerMultiplier = 0.8, -- Fewer commuters
tipMultiplier = 1.3, -- Tourists tip more
vipWeightBonus = 15, -- Extra VIP event weight
},
}
| Period | Hours | Passengers | Tips | Fare |
|---|---|---|---|---|
| Morning Rush | 7:00–9:00 | 2.0x | 1.5x | 1.0x |
| Daytime | 9:00–17:00 | 1.0x | 1.0x | 1.0x |
| Evening Rush | 17:00–19:00 | 2.0x | 1.5x | 1.0x |
| Evening | 19:00–22:00 | 1.2x | 1.2x | 1.0x |
| Late Night | 22:00–2:00 | 0.5x | 1.8x | 1.3x |
| Early Morning | 2:00–7:00 | 0.3x | 2.0x | 1.3x |
Daily Challenges
Config.DailyChallenges = {
enabled = true,
count = 3, -- Number of challenges per day
resetHour = 6, -- Reset hour (server time, 0-23)
pool = {
-- Types: 'trips', 'passengers', 'earnings', 'perfectRating', 'laps'
{ type = 'trips', target = 3, reward = 150, icon = 'fa-route', difficulty = 'easy' },
{ type = 'trips', target = 5, reward = 300, icon = 'fa-route', difficulty = 'medium' },
{ type = 'trips', target = 8, reward = 500, icon = 'fa-route', difficulty = 'hard' },
{ type = 'passengers', target = 15, reward = 100, icon = 'fa-users', difficulty = 'easy' },
{ type = 'passengers', target = 30, reward = 250, icon = 'fa-users', difficulty = 'medium' },
{ type = 'passengers', target = 50, reward = 450, icon = 'fa-users', difficulty = 'hard' },
{ type = 'earnings', target = 500, reward = 200, icon = 'fa-dollar-sign', difficulty = 'easy' },
{ type = 'earnings', target = 1500, reward = 400, icon = 'fa-dollar-sign', difficulty = 'medium' },
{ type = 'earnings', target = 3000, reward = 700, icon = 'fa-dollar-sign', difficulty = 'hard' },
{ type = 'perfectRating', target = 1, reward = 250, icon = 'fa-star', difficulty = 'medium' },
{ type = 'perfectRating', target = 3, reward = 600, icon = 'fa-star', difficulty = 'hard' },
{ type = 'laps', target = 5, reward = 150, icon = 'fa-repeat', difficulty = 'easy' },
{ type = 'laps', target = 10, reward = 350, icon = 'fa-repeat', difficulty = 'medium' },
{ type = 'laps', target = 20, reward = 600, icon = 'fa-repeat', difficulty = 'hard' },
},
}
Bus Condition Management
Config.BusCondition = {
enabled = true,
fuel = {
enabled = true,
startLevel = 100.0, -- Starting fuel %
consumptionRate = 0.02, -- Fuel % per second while moving
idleRate = 0.004, -- Fuel % per second while idle
warningThreshold = 25.0, -- Yellow warning below this %
criticalThreshold = 10.0, -- Red critical below this %
refuelCostPerPercent = 3, -- Cost per 1% fuel at depot
},
condition = {
enabled = true,
warningThreshold = 40.0, -- Yellow warning
criticalThreshold = 20.0, -- Red warning + speed penalty
speedPenalty = 0.6, -- Speed multiplier when critical (40% reduction)
repairCostPerPercent = 8, -- Cost per 1% repair at depot
},
repairAtDepot = true, -- Auto repair/refuel on return (cost deducted)
}
Driving Rating System
5-star rating system that tracks driving behavior during routes. Affects tips and completion bonus.
Config.DrivingRating = {
enabled = true,
startScore = 100, -- Starting score (max 100)
penalties = {
hardBrake = {
enabled = true,
deduction = 5, -- Score per hard brake
speedThreshold = 30, -- Min speed (km/h) to trigger
decelThreshold = 15, -- Speed drop per check
cooldown = 3000, -- ms cooldown
},
collision = {
enabled = true,
deduction = 10, -- Score per collision
cooldown = 5000,
},
speeding = {
enabled = true,
deduction = 2, -- Score per speeding tick
speedLimit = 80, -- Speed limit (km/h)
interval = 5000, -- Check interval (ms)
},
runRedLight = {
enabled = true,
deduction = 15, -- Score per red light
cooldown = 10000,
},
},
stars = {
{ min = 90, stars = 5, label = 'Excellent' },
{ min = 75, stars = 4, label = 'Good' },
{ min = 55, stars = 3, label = 'Average' },
{ min = 35, stars = 2, label = 'Poor' },
{ min = 0, stars = 1, label = 'Terrible' },
},
tipBonus = {
[5] = 2.0, -- 5 stars: tip chance doubled
[4] = 1.5, [3] = 1.0, [2] = 0.5, [1] = 0.0,
},
completionBonusMultiplier = {
[5] = 1.25, -- 5 stars: +25% completion bonus
[4] = 1.1, [3] = 1.0, [2] = 0.8, [1] = 0.5,
},
}
Bus Depot
Config.Depot = {
coords = vector3(463.84, -576.1, 28.5),
blip = { enabled = true, sprite = 513, color = 47, scale = 0.8, label = 'Bus Depot' },
busSpawnPoint = vector4(462.95, -605.85, 28.5, 213.18),
parkingZone = { coords = vector3(462.95, -605.85, 28.5), radius = 10.0 },
npcs = {
dispatch = {
model = 's_m_y_airworker',
coords = vector4(458.08, -596.84, 28.5, 235.08),
scenario = 'WORLD_HUMAN_STAND_MOBILE',
label = 'Bus Dispatch',
icon = 'fas fa-bus',
},
},
}
Buses
Config.Buses = {
{ model = 'bus', label = 'City Bus', maxPassengers = 15, requiredLevel = 1 },
{ model = 'airbus', label = 'Airport Shuttle', maxPassengers = 20, requiredLevel = 2 },
{ model = 'coach', label = 'Luxury Coach', maxPassengers = 25, requiredLevel = 3 },
}
Player Levels
Config.Levels = {
[1] = { name = 'Newcomer', requiredTrips = 0, bonus = 0 },
[2] = { name = 'Growing', requiredTrips = 50, bonus = 5 },
[3] = { name = 'Established', requiredTrips = 150, bonus = 10 },
[4] = { name = 'Major', requiredTrips = 400, bonus = 15 },
[5] = { name = 'Premium', requiredTrips = 1000, bonus = 20 },
}
Fare System
Config.Fare = {
baseFare = 3,
zoneExtraFare = 1,
nightSurcharge = 30, -- % surcharge
nightStart = 22,
nightEnd = 6,
studentDiscount = 30, -- % discount
elderlyDiscount = 50, -- % discount
}
Payment System
Config.Payment = {
cardChance = 40,
cashExactChance = 25,
cashOverpayChance = 30,
cashUnderpayChance = 5,
cardProcessTime = 1500,
cardFailChance = 5,
denominations = { 20, 10, 5, 1 },
changeTimeLimit = 15,
tipChance = 20,
tipMin = 1,
tipMax = 3,
cameraTransitionTime = 800,
cameraOffset = vector3(0.0, 0.5, 0.7),
}
Routes
5 default routes included. Add unlimited custom routes manually or via the Route Builder tool.
Config.Routes[6] = {
id = 6,
name = 'My Custom Route',
description = 'A custom route created with route builder',
color = '#9333ea',
requiredLevel = 1,
basePay = 60,
completionBonus = 120,
estimatedTime = 20,
stops = {
{ id = 1, name = 'Stop A', coords = vector4(x, y, z, heading), waitTime = 10, minNPC = 1, maxNPC = 5, zone = 1 },
{ id = 2, name = 'Stop B', coords = vector4(x, y, z, heading), waitTime = 10, minNPC = 1, maxNPC = 5, zone = 1 },
},
}
See the Customization page for the Route Builder guide.
NPC Settings
Config.NPC = {
types = {
{ type = 'normal', chance = 50, fareMultiplier = 1.0 },
{ type = 'student', chance = 20, fareMultiplier = 0.7 },
{ type = 'elderly', chance = 15, fareMultiplier = 0.5 },
{ type = 'tourist', chance = 10, fareMultiplier = 1.2 },
{ type = 'vip', chance = 5, fareMultiplier = 1.5 },
},
boardingTime = 3000,
alightingTime = 2000,
maxWaitAtStop = 30,
minRideStops = 1,
maxRideStops = 4,
}
NPC Speech
Config.NpcSpeech = {
card = { ... }, -- Card payment lines
cashExact = { ... }, -- Exact cash lines
cashOver = { ... }, -- Overpay lines (asking for change)
cashUnder = { ... }, -- Underpay lines
changeReceived = { ... }, -- After receiving change
cardFailed = { ... }, -- Card fail lines
tip = { ... }, -- Tip lines
fareEvader = { ... }, -- Fare evader event lines
drunk = { ... }, -- Drunk passenger event lines
sick = { ... }, -- Sick passenger event lines
vipGreeting = { ... }, -- VIP pickup event lines
}
Sound Effects
Config.Sounds = {
cardBeep = { name = 'Beep_Green', ref = 'DLC_HEIST_HACKING_SNAKE_SOUNDS' },
cardFail = { name = 'Beep_Red', ref = 'DLC_HEIST_HACKING_SNAKE_SOUNDS' },
cashRegister = { name = 'PICK_UP', ref = 'HUD_FRONTEND_DEFAULT_SOUNDSET' },
changeReturn = { name = 'PICK_UP_COLLECTIBLE', ref = 'HUD_FRONTEND_DEFAULT_SOUNDSET' },
doorOpen = { name = 'SELECT', ref = 'HUD_FRONTEND_DEFAULT_SOUNDSET' },
doorClose = { name = 'BACK', ref = 'HUD_FRONTEND_DEFAULT_SOUNDSET' },
routeComplete = { name = 'CHALLENGE_UNLOCKED', ref = 'HUD_AWARDS' },
}
UI Settings
Config.UI = { drag = false, position = { x = 50, y = 50 } }
Random Event System
Config.Events = {
enabled = true,
triggerChance = 15,
minStopsBetween = 3,
fareEvader = {
enabled = true, weight = 35, reportBonus = 10,
models = { 'a_m_y_skater_01', 'a_m_y_stwhi_02', 'a_f_y_hippie_01' },
},
drunkPassenger = {
enabled = true, weight = 25, kickDelay = 5000,
models = { 'a_m_m_tramp_01', 'a_m_m_stlat_02', 'a_m_y_mexthug_01' },
},
sickPassenger = {
enabled = true, weight = 20, hospitalBonus = 50,
hospitalCoords = vector3(-449.67, -340.83, 34.50),
hospitalRadius = 30.0,
},
vipPickup = {
enabled = true, weight = 20, bonusMin = 30, bonusMax = 80,
models = { 'a_m_m_bevhills_02', 'a_f_m_bevhills_01', 'a_m_y_business_03' },
},
}
Last updated: February 28, 2026