NullSect
Systems nominal

Docs / Taxi / Installation

INSTALLATION — ns-taxi

1. Requirements

RequirementNote
FiveM server with OneSync enabledThe server checks positions, seats and vehicles itself
oxmysqlMust start before ns-taxi
MySQL / MariaDB user with CREATE, ALTER, INSERT, UPDATE, DELETENeeded only for the automatic migration
Frameworkqbx_core (primary), qb-core, es_extended, or standalone (Config.Framework)
ox_lib / ox_target (recommended)Notifications, menus and interaction points; the resource works without them
qbx_radialmenu / qb-radialmenu (optional)"Call a taxi" radial item (Config.PlayerRides.radial)

2. Copy the resource

Put the folder in your resources directory, keeping the folder name exactly:

resources/[ns]/ns-taxi

The name matters: the NUI page, the exports, the events and the convars all use ns-taxi.

3. server.cfg

ensure oxmysql
ensure ox_lib          # optional
ensure ox_target       # optional
ensure qbx_core        # or your framework
ensure ns-taxi

# Admin tools (/taxilevel, /taxilocations, /taxicompany ...)
add_ace group.admin ns-taxi.admin allow

# Optional: Discord log (see section 9). Server-only, never sent to players.
# set ns_taxi_webhook "https://discord.com/api/webhooks/..."

Framework admins (Qbox / QBCore permission, ESX group) are accepted as well while Config.Admin.useFrameworkAdmin = true.

4. Database

With Config.Database.autoMigrate = true (default) the tables are created and upgraded on start:

ns_taxi_meta               schema version
ns_taxi_drivers            career: xp, reputation, rating, counters, earnings
ns_taxi_rides              ride log (statistics, leaderboard, duplicate payout guard)
ns_taxi_vehicles           cab condition per driver and model
ns_taxi_vehicle_upgrades   bought upgrades per cab model
ns_taxi_achievements       unlocked achievements
ns_taxi_customers          customer memory (regulars, favourites, grudges)
ns_taxi_companies          player taxi companies
ns_taxi_company_members    company employees and grades
ns_taxi_company_log        company bank / staff log
ns_taxi_fleet              company cabs
ns_taxi_audit              admin actions
ns_taxi_refunds            payouts / escrow refunds kept for players who were offline

If your SQL user may not create tables, set Config.Database.autoMigrate = false and import sql/ns-taxi.sql by hand. Every statement is CREATE TABLE IF NOT EXISTS / guarded — it never drops or overwrites data.

5. The job (optional)

By default anyone can start a taxi shift (Config.Job.required = false). To limit it to a job, set required = true and create the job taxi (Config.Job.name).

Qbox / QBCore — shared/jobs.lua:

taxi = {
    label = 'Taxi',
    defaultDuty = true,
    grades = {
        [0] = { name = 'Driver', payment = 50 },
        [1] = { name = 'Senior Driver', payment = 75 },
        [2] = { name = 'Manager', isboss = true, payment = 100 },
    },
},

ESX — add taxi to the jobs / job_grades tables.

6. Taxi tablet item

The driver terminal is the taxi_tablet item (Config.Tablet.item). Players take it from the dispatcher NPC at the HQ and open it by using the item, /taxi or F6.

ox_inventory — ox_inventory/data/items.lua:

['taxi_tablet'] = {
    label = 'Taxi Tablet',
    weight = 500,
    stack = false,
    close = true,
    description = 'Taxi driver terminal. Start your shift and receive calls with it.',
},

QBCore: add taxi_tablet to qb-core/shared/items.lua; ESX: to the items table. Config.Tablet.enabled = false turns the item off: the HQ duty point then starts and ends the shift.

7. Place the HQ and the ride locations

Every coordinate shipped with the resource is marked -- example (Downtown Cab Co.). Replace them:

HQ, garage, spawn points, cleaning / maintenance stations are in config.lua (Config.TaxiCompany, Config.Cleaning.stations, Config.Maintenance.stations, Config.Tablet.npc.coords). Stand on the spot, run /taxicoords (prints a vector4 in F8), paste it and restart ns-taxi.

Pickup and drop-off spots (in game, no file editing):

  1. Run /taxilocations (admin).
  2. Stand where a passenger should wait, record the spot, name it and pick its role and tags. /taxilocations view shows the recorded spots in the world.
  3. Spots are live at once and stored in data/locations.json — keep that file when you update.
  4. Config.Locations.useDefaults = true also uses the built-in spots of data/locations.lua; set it to false once your own spots cover the map.

8. First test run

  1. restart ns-taxi and look for ns-taxi v0.13.1 ready (framework: qbox, locale: tr). in the console.
  2. Take a tablet from the dispatcher NPC, use it → Start shift.
  3. Take a cab at the garage and wait for a ride offer (Y accepts, N declines).
  4. With Config.Debug = true, /taxiride forces a test ride (never pays).
  5. /nsstatus (admin or console) shows every running NullSect resource with its version.

9. Discord log (optional)

Suspicious-activity flags, admin actions and large payouts can be posted to a Discord webhook. The URL is a server-only convar — it is never put in config.lua, because that file is also sent to every player:

set ns_taxi_webhook "https://discord.com/api/webhooks/..."            # every category
set ns_taxi_webhook_security "https://discord.com/api/webhooks/..."   # optional, security only

Categories and the payout threshold are set in Config.Logs (see CONFIGURATION.md). Messages carry the player name, server id and license; mentions are disabled.

10. Troubleshooting

SymptomCause / fix
No framework adapter registeredConfig.Framework names a framework that is not started. Use 'auto' or 'standalone'.
Database initialisation failedThe SQL user cannot create tables → import sql/ns-taxi.sql, set autoMigrate = false.
No ride offersYou are not on shift, or no recorded / default spot is in range (Config.Dispatch.maxPickupDistance). Record spots with /taxilocations.
"You need a taxi tablet" / shift ends by itselfThe tablet item is missing from your inventory (Config.Tablet.requireForShift).
Interaction does nothingNo ox_target / qb-target: stand in the circle and press E (Config.Target.promptControl).
Cab does not spawnAll spawn points are blocked or the model in data/vehicles.lua does not exist.
Tablet empty / fonts wrongCheck F8 for NUI errors; copy nui/ completely, including nui/fonts/.
No Discord messagesConvar name must use _: ns_taxi_webhook. The category must be on in Config.Logs.webhook.

11. Updating

  1. Keep your own config.lua, data/*.lua, data/locations.json and locales/*.lua — compare them with the new ones instead of overwriting.
  2. Replace everything else.
  3. Restart. New schema versions migrate themselves; ns_taxi_meta records the current version.

Cart

Your cart is empty.