Using Taxi Job: the job panel, shifts and NPC fares, how pay is worked out, the taximeter and on-time bonus, passenger requests, illegal stops, ratings, tips, streaks, levels, player passengers, leaderboards and every config option.
Everything starts at the dispatcher — Manuel Ortega, standing at the rank under a floating marker. Walk up and press E (or use the target option, with Config.Target on): the camera cuts to him, your own character is hidden from the shot, and the job panel opens on the right half of the screen.
Part
What it shows
Header
Your level, the experience towards the next one, and your reputation badge — the average of every star you have been given and the fares you have driven.
The dispatcher's card
Config.PedName and Config.PedGreeting. Leave either empty to hide it.
Shift card
The taxi shift as it stands for you: pay per 100 m at your level, experience per 100 m, and the chance of an illegal stop.
Your Cab
Every cab in Config.Vehicles. Locked ones are shown dimmed with the level they need, so drivers can see what comes next.
Statistics
The leaderboards. Hidden when Config.EnableLeaderboard is off.
Guide
The driver's handbook. Hidden when Config.EnableGuide is off.
Start shift / Clock off
Which one shows depends on whether you are already on shift.
The panel opens for anyone, so players without the job can still read the guide and the leaderboards — starting a shift is what checks the job. Escape or the close button hands control back.
Every number on the panel is display only. The server works the same figures out again, from the same config, when a fare is actually paid.
Pick a cab and press Start shift. Before anything is spawned, the job checks:
The player has a job listed in Config.TaxiJob — unless Config.RequireJob is off.
They are not already on shift.
Their level is high enough for the cab. The panel greys locked cabs out, and the server checks again.
There is a free bay in Config.VehicleSpawnCoords. With every bay blocked by a vehicle, the shift is refused with Parking lot is full.
The screen fades, and the cab appears at the bay with the driver behind the wheel (Config.SpawnInsideVehicle). The keys are handed over, the tank is filled if Config.Fuel is on, and the uniform goes on if Config.Clothing is on. Then the radio is quiet for a moment — between Config.CustomerCallsminTime and maxTime, 5 to 20 seconds by default — before the first fare comes in.
The server draws a pickup from Config.Rides.startLocation and a drop-off from finishLocation, and the pickup goes on the GPS. The tracker shows what the fare pays and the experience it is worth.
Collect the passenger
The passenger appears as you approach. Stop the cab within Config.InteractDistance (12 m) and press E. They take the first free seat, back seats first, and the server checks the cab is really there.
Drive
The taximeter starts, the route switches to the drop-off and the on-time clock begins. Some passengers ask for something on the way, and some offer an illegal stop.
Drop them off
Stop within 12 m of the drop-off and press E. The passenger gets out and walks off, you are paid, and the star card shows the rating, the fare, the tip and your streak.
The next call
After another pause the radio calls again. It keeps calling until you clock off — even after a fare that went wrong.
There are no ground markers. The GPS route and the prompt that appears at Config.InteractDistance are what tell a driver they have arrived — keep that distance generous enough that the stop is never a guessing game.
A fare is priced on the straight-line distance between its pickup and its drop-off, so spreading your points across the map is what creates long, well-paid rides. The pay is built up in this order:
Step
How it is worked out
Default
Base fare
Distance ÷ 100 × the pay per 100 m at the driver's level × the cab's moneyMultiplier
$10 per 100 m at level 1
Illegal stop
Config.IlegalRideMultiplier, on pay and experience
×2.0
On time
Config.ExtraBonusMultiplier, on pay and experience
×1.2
Request met
The passenger request's payMultiplier
×1.20 to ×1.35
Streak
The highest streak tier reached
×1.10 to ×1.35
Tip
A share of everything above, by star rating
0 to 25%
A worked example, at level 1 in the stock Taxi: a 2 km fare is $200. Delivered on time it becomes $240; an urgent passenger who got there in time takes it to $324; as the fourth fare in a row it is $356; and five stars add an $89 tip — $445 for the ride, and 480 experience.
Cash to the driver. With qs-job-management running, it goes into the taxi job's money there instead.
An illegal fare
Black money: the black_money account on ESX, the black_money item on QBCore and Qbox.
A player fare
Cash, from the passenger up front to the driver on arrival — or to the job's money with qs-job-management.
If a payment cannot land — an ESX install with no black_money account, a QBCore inventory with no black_money item, a full bag — the driver is told so plainly and the money is not counted on the leaderboard. The experience is still given: the work was done.
Once the passenger is in, the taximeter shows the fare climbing and the distance left, in Config.DistanceUnit (km or miles), and the tracker counts down the bonus clock.
Setting
Default
What it does
Config.SecondsPerMeterForBonus
0.1
Time allowed per metre of the fare — 10 seconds per 100 m.
Config.SecondsReducedForCrash
20
Seconds docked every time the cab is damaged.
Config.ExtraBonusMultiplier
1.2
Pay and experience multiplier for arriving in time.
Config.AddedTimeForIllegalRides
10
Extra seconds granted for taking an illegal stop.
The clock that counts is the server's. It starts when the passenger is picked up, and the countdown on screen is only a display of it — a reported crash can lose the bonus, but nothing can claim it after the real deadline.
With Config.PassengerEvents on, 40% of fares ask for something beyond arriving. The request shows on the tracker the moment the passenger gets in. Meeting it multiplies the pay; ignoring it costs stars, never the fare.
Request
What they want
Pays
Urgent Fare (hurry)
The bonus clock is cut to 75% (target). Arrive before it runs out.
×1.35
Delicate Passenger (queasy)
No more than 3 hard stops (target). A warning shows after each one.
×1.20
Sightseeing Fare (tourist)
Drive within 60 m (radius) of a sight, marked on the map with its own blip.
×1.30
A hard stop is a big drop in speed in a fraction of a second — a slammed brake or a kerb — measured above walking pace, so manoeuvring does not count. The sight a tourist asks for is one of your drop-off points: the one that costs the least detour, so a fare from the docks is never sent across the map. Each request's weight sets how common it is compared with the others.
Once the passenger is in, there is a Config.ChanceToGetIllegalJob chance (10%) that they offer a stop on the way. A window shows what the detour pays and the chance of the police being told, and the driver accepts or declines.
Accepted, the route switches to a point from Config.Rides.illegalLocation, marked in its own blip colour so it never reads as the destination. The fare is re-priced on the whole journey — pickup, stop, drop-off — and doubled. At the stop the passenger gets out, walks up to the buyer, and the two make the exchange.
Outcome
What happens
Not reported
The passenger gets back in and the route continues to the drop-off. Paid in black money on arrival.
Reported
Config.DispatchExport is called, both peds flee, and the fare is lost. The shift carries on and the radio keeps calling.
The chance of being reported starts at 20% and falls by 1% per level, down to about 11% at the level-60 cap. The roll is made on the server, after the hand-off scene has played.
With Config.Rating on, every NPC fare is scored out of five stars. Each ride starts at five and loses stars from there:
Mistake
Stars lost
Each crash during the ride
0.75 (crashPenalty)
Missing the on-time bonus
1.5 (latePenalty)
Ignoring the passenger's request
1.0 (eventFailPenalty)
The result is rounded to a whole star and never falls below one (minStars). The tip is a share of the fare after all the multipliers:
Stars
Tip
★★★★★
25%
★★★★
15%
★★★
5%
★ or ★★
Nothing
With noTipAfterCrash on, a single crash loses the tip whatever the stars came to — nobody tips the driver who put them through the windscreen. The star card at the end of each fare explains every star taken and shows the fare, the tip, the total and the streak; turning showCard off hides the card but keeps the rating and the tip.
Every rating goes on the driver's record: an average, the number of ratings and the number of fares driven. It shows in the panel header, and on the driver card a player passenger sees before accepting a ride. Records live in driver_ratings.json, written every minute and on shutdown.
Fares finished back to back pay more and more. A fare that was reported to the police does not break the streak; clocking off or abandoning the shift takes it back to zero — that is the point: it is a reason to stay out.
Fares in a row
Pay multiplier
3
×1.10
5
×1.20
10
×1.35
The tier reached on the previous fare is the one that pays the next, so the third fare in a row finishes at normal pay and the fourth is the first paid at ×1.10.
Every fare earns Config.ExperiencePerHundredMeters (20) experience per 100 m — 200 per kilometre — multiplied by the illegal-stop and on-time bonuses. Levelling never stops: each level asks for a little more than the last, and each one pays better.
Setting
Default
What it does
BaseExperience
1000
Experience needed to leave level 1.
GrowthFactor
1.1
Each level needs 10% more than the one before.
MoneyPerHundredMeters
10
Base pay per 100 m at level 1.
GrowthFactorMoney
1.02
Pay rises 2% per level.
PoliceAlertChance
20
Chance, in %, of an illegal stop being reported at level 1.
GrowthFactorPoliceAlert
0.99
The alert chance falls 1% per level.
Config.MaxBonusLevel
60
The level where pay and alert scaling stop growing. Levelling itself carries on.
These live in Config.LevelExperience. With the defaults, a level-10 driver earns about $11.95 per 100 m and needs 2,357 experience for the next level; a driver at the cap earns about $32.17 per 100 m — three times a beginner — and is reported on roughly 11% of illegal stops. Without the cap, a long-lived character would eventually earn absurd fares and never be reported.
Config.Vehicles is the list the cab picker draws, in order. Add as many as you like — the first one is also the fallback if a cab is ever missing:
lua
Config.Vehicles = {
{
model = 'taxi', -- spawn name, must exist on your server
label = 'Taxi', -- shown on the card
img = 'taximodel.png', -- the shipped picture, or a full https:// URL
seats = 4, -- shown as a tag on the card
levelRequired = 1, -- the lowest level that can take it out
moneyMultiplier = 1.0, -- multiplies every fare driven in it
},
{
model = 'stanier',
label = 'Stanier Cab',
img = 'https://docs-backend.fivem.net/vehicles/stanier.webp',
seats = 4,
levelRequired = 10,
moneyMultiplier = 1.15,
},
}
For a cab's picture, use a full https:// address — the FiveM vehicle gallery at docs-backend.fivem.net/vehicles/<model>.webp has one for every base-game car. A picture that cannot be found falls back to a car mark, so a typo costs the picture and nothing else. Config.ShiftImage sets the shift card's cover the same way; set it to nil for a plain taxi mark.
The passengers and the buyers at illegal stops are drawn at random from Config.PassengerModels (77 peds) and Config.DealerModels (10). Any valid ped model works.
A real player can ride in a working cab. The moment they sit down, the driver's client reports it and the server pairs the two — as long as the driver is on shift and they are within 10 m of each other.
Mark a destination
The passenger's map opens. They drop a waypoint and close the map. Any waypoint left over from before they got in is cleared first, so the quote is always for where they mean to go.
The quote
The server prices the trip from the passenger to the waypoint — at the driver's level, in the driver's cab — and shows it beside a driver card: name, level, star rating, number of ratings and fares driven.
Accept and pay
Accepting charges the fare in cash, up front. Declining re-opens the map. Not having enough money re-opens it too, so somewhere closer can be tried.
The ride
The driver gets the route and the taximeter, and the passenger sees the same meter. A player comes first: any NPC fare the driver had going is dropped.
Arrival
The driver stops within 12 m of the waypoint and presses E. The driver is paid the quote, the passenger steps out and — for any trip over 100 m — is asked to rate the driver from one to five stars. The rating has to be given within three minutes, once.
Situation
What happens
The driver clocks off, disconnects or loses the job
A paid fare is refunded to the passenger in full.
The passenger gets out before paying
The request is cancelled. Nothing is charged.
The passenger gets out after paying
The driver still earns the fare on reaching the destination.
A second player gets into the same cab
One player fare per cab at a time. The second passenger is offered again once the first fare is over.
Config.TaxisRideFree is on
A passenger with a taxi job rides free — checked on the server against their real job.
The money changes hands on arrival either way, but the experience and the leaderboard earnings are only given when the cab really drove the route: it has to cover at least 75% of the quoted distance, in a time a car could actually do it. Two players who park side by side at a far waypoint earn nothing but the money they passed between themselves.
Statistics in the job panel opens three rankings, each ordered by experience with earnings beside it. Your own row is highlighted, and a search box finds anyone else.
Ranking
Resets
Prize for 1st · 2nd · 3rd
All-time
Never
—
Season
00:00 on the first day of every month
$5,000 · $3,500 · $2,000
Daily
00:00 every day
$500 · $350 · $200
The boards refresh every Config.UpdateLeaderboard minutes (1) and list up to Config.MaxLeaderboardPlayers drivers (100). Each ranking shows a countdown to its reset, the prizes on offer and the last winners. Prizes are set in Config.LeaderBoardRewards.
Prizes are paid in cash. A winner who is offline at the reset is paid on their next login. Resets follow the server's clock, and a server that was down over midnight or a month boundary catches up when it starts — never paying the same period twice.
Guide in the job panel opens the Driver's Handbook: an introduction, the steps of a shift and a list of tips. All of it comes from the GUIDE_INTRO, GUIDE_STEP_1 to GUIDE_STEP_12 and GUIDE_TIP_1 to GUIDE_TIP_12 keys in config/translations.lua, read in order until the first missing number — so a step is added, reworded or removed by editing the translation alone.
Open the panel at the dispatcher and press Clock off. A confirmation warns when a passenger is still in the cab; confirming abandons that fare unpaid, takes the cab back, restores the player's own clothes and resets the streak. The panel stays open, so a new shift can be started straight away.
A shift also ends on its own when the driver loses the job, disconnects, or the resource restarts. Another script can end it too, through the cancelShift export — a jail script, for example.
Every option lives in config/config.lua, in ten numbered sections. Changes apply when the resource restarts.
1. General — jobs, interaction, names and money
Option
Default
What it does
Config.RequireJob
true
Only players with a job in Config.TaxiJob can start a shift.
Config.TaxiJob
taxi
The jobs allowed to drive.
Config.Target
false
A target option on the dispatcher instead of a key press.
Config.TargetScript
"ox"
"ox" for ox_target, "qb" for qb-target.
Config.DrawText3D
false
Floating 3D text instead of the corner prompt.
Config.InteractDistance
12.0
Metres at which the pickup, drop-off and stop prompts appear.
Config.Keys.InteractKey
38 (E)
The interaction key, as a FiveM control id.
Config.PlayerNameSource
'character'
Names on the leaderboard and driver card: 'character', 'cfx' (the FiveM name) or 'both'.
Config.PedName · Config.PedGreeting
Manuel Ortega
The dispatcher's card in the panel. Empty hides it.
Config.DistanceUnit
"miles"
The taximeter's unit: "km" or "miles".
Config.DefaultNotifications
true
The built-in notifications. false sends them to SendTextMessage.
Config.CurrencyPosition
"prefix"
$500, or "suffix" for 500 zł.
Config.QuasarInventory
false
Locks qs-inventory while the uniform changes.
Config.Clothing
false
Dresses the driver in the uniform from client/clothing.lua.
Config.DispatchExport
empty
Called when an illegal stop is reported.
2. World — blips, the dispatcher and the rank
Option
Default
What it does
Config.EnableBlip
true
The Taxi Services blip, shown to players with the job.
Config.Blip
sprite 198, colour 5
3. Vehicles — cabs, passengers and buyers
Option
Default
What it does
Config.Vehicles
Taxi
The cab picker — see The Cabs above.
Config.PassengerModels
77 peds
4. Rides — pickups, drop-offs and illegal stops
Option
Default
What it does
Config.Rides.startLocation
12 points
Where fares wait. vector4 — the fourth value is the way they face.
Config.Rides.finishLocation
13 points
5. Levels and shifts — pay, experience and the bonus clock
Option
Default
What it does
Config.LevelExperience
see Levels and Experience
The experience curve, and the pay and alert scaling.
Config.MaxBonusLevel
60
6. Ratings, passenger requests and streaks
Option
Default
What it does
Config.Rating.Enabled
true
Star ratings and tips on NPC fares.
crashPenalty · latePenalty · eventFailPenalty
7–9. Guide, leaderboard and marker
Option
Default
What it does
Config.EnableGuide
true
The Guide button in the panel.
Config.EnableLeaderboard
true
10. Debug and webhooks
Option
Default
What it does
Config.Debug
false
Explains what the script is doing in the server console and F8. Off on a live server.
Config.Webhooks
off
The dispatcher's position, the bays and the ride points are content tables: change the values freely, keep the structure. Spreading pickups and drop-offs across the whole map is what makes long fares — and long fares are what make the job worth doing.
That blip's text, sprite, size, colour and display.
Config.RouteBlip
sprite 1, colour 5
The blip on the pickup and the drop-off.
Config.IllegalRouteBlip
sprite 1, colour 64
The blip on an illegal stop.
Config.StartJob.ped
cs_manuel
The dispatcher's position (vector4, with heading) and model.
Config.VehicleSpawnCoords
10 bays
Where cabs appear. One driver can start per free bay.
Config.SpawnInsideVehicle
true
Seats the driver in the cab, behind a short fade.
Config.Fuel · Config.FuelExport
false · LegacyFuel
Fills the tank on spawn through that resource's SetFuel.
One is drawn at random for each fare.
Config.DealerModels
10 peds
The buyer waiting at an illegal stop.
Where they go — and the sights tourists ask for.
Config.Rides.illegalLocation
5 points
Where an illegal stop is made.
Config.CustomerCalls
5 to 20
Seconds of radio silence between one fare ending and the next call.
Config.TaxisRideFree
false
Taxi drivers ride free in a colleague's cab.
Where the pay and alert scaling stop.
Config.ExperiencePerHundredMeters
20
Experience per 100 m driven.
Config.IlegalRideMultiplier
2.0
Pay and experience multiplier for a fare with an illegal stop.
Config.ChanceToGetIllegalJob
10
% of fares that offer an illegal stop. 0 turns them off.
Config.SecondsPerMeterForBonus
0.1
Bonus time allowed per metre.
Config.SecondsReducedForCrash
20
Seconds docked per crash.
Config.ExtraBonusMultiplier
1.2
Pay and experience multiplier for arriving in time.
Config.AddedTimeForIllegalRides
10
Extra seconds for taking an illegal stop.
Config.ShiftImage
'taximodel.png'
The shift card's cover. A URL works; nil shows a plain taxi mark.
0.75 · 1.5 · 1.0
Stars lost per mistake.
minStars
1
The lowest possible score.
tips
25% · 15% · 5% · 0 · 0
The tip by stars, from 5 down to 1.
noTipAfterCrash
true
One crash loses the tip.
showCard
true
The star card at the end of each fare.
Config.PassengerEvents
on, 40%
Passenger requests, the share of fares that roll one, and each request's weight, target, radius and payMultiplier.
Config.Streaks
on, 3 · 5 · 10
Streak tiers: the fares in a row and the multiplier each one pays.
The Statistics button, the rankings, resets and prizes.
Config.UpdateLeaderboard
1
Minutes between leaderboard refreshes.
Config.MaxLeaderboardPlayers
100
Drivers listed per ranking. Higher costs query time on every refresh.
Config.LeaderBoardRewards
Daily 500 · 350 · 200, Season 5000 · 3500 · 2000
Cash for the top three at each reset.
Config.PedMarker
blue cone
The marker over the dispatcher: enabled, type, height, distance, bob, size and colour.