NullSect
Systems nominal

Docs / Taxi / Overview

ns-taxi — NullSect Advanced Taxi Job

Status: beta (0.13.1). Full rides with rating, tips, XP, reputation, cab condition, services, upgrades, passenger dialogues, 11 random events, driver terminal (tablet) + ride HUD, 29 achievements, persistent statistics, customer memory, player taxi requests, player-owned taxi companies with employees and a company fleet. Security hardening, fare escrow and database indexes are done; 1.0 follows after the final test round. Setup: INSTALLATION.md · every config option: CONFIGURATION.md.

Dependencies

ResourceRequiredNotes
OneSyncyesserver-side entity validation
oxmysqlyesdatabase
qbx_core / qb-core / es_extendedone of them, or standaloneselected by Config.Framework = 'auto'
ox_liboptionalnotifications / progress (Config.UseOxLib)
ox_targetoptionalinteraction zones (Config.UseOxTarget)
qbx_radialmenu / qb-radialmenuoptional"Call a taxi" radial item (Config.PlayerRides.radial)

Installation

  1. Place the ns-taxi folder in your resources (e.g. resources/[nullsect]/ns-taxi).
  2. Ensure it after oxmysql and your framework:
    ensure oxmysql
    ensure qbx_core
    ensure ns-taxi
    
  3. Database: tables are created automatically on first start (Config.Database.autoMigrate = true). To install manually, import sql/ns-taxi.sql.
  4. Admin permission:
    add_ace group.admin ns-taxi.admin allow
    

Admin commands (so far)

CommandDescription
/taxilevel [id] [level]Set a driver's level (sets XP to the level threshold)
/taxireputation [id] [0-100]Set reputation
/taxiclear [id]Reset a driver's runtime taxi state
/taxiprofile [id]Print a driver's profile
/taxicoordsPrint your position as vector4 (F8)
/taxilocations [view]Ride location tool: record / edit exact pickup and drop-off spots (view toggles the world view)
/taxirideForce a test ride offer for yourself (Config.Debug only, never pays)
/taxievent [id]Force a random event on your current ride; no id lists the events (Config.Debug only)
/taxitest dialogue [id] | remark [speed|brake|crash] | luggage | regular [normal|favorite|grudge] | skipRide test tools (Config.Debug only): open a dialogue, trigger a passenger remark, next test ride with luggage / as a regular customer, jump to the pickup / destination on a test ride
/taxicompany list | create [id] [name] | delete [companyId]List, create (for a player, who becomes boss) or delete taxi companies
/nsstatusEvery running NullSect resource: version, newer version (when an update URL is set), database / sessions / rides

All commands require the ns-taxi.admin ACE or framework admin, and are written to ns_taxi_audit.

Player commands

CommandDescription
/taksicagirCall a taxi (also in the radial menu). Places near you, your GPS mark or "tell the driver"
/taksiiptalCancel your taxi request (before you get in)
/taksihedefOn a "tell the driver" or street-hail ride: send your map mark to the driver as a route (also the radial item while you ride)

When you get in, the highest possible fare of the ride is held from your bank / cash; the final fare comes out of it and the rest is refunded at the end (or on your next login if you were offline). You cannot be driven without covering it (Config.PlayerRides.escrow).

Taximeter & street hail (0.13.0)

  • Taximeter on screen: every player picks the look in tablet → Settings: classic LED device, slim strip or the old cells in the ride status bar; position (top center, top right, bottom right), size and a click sound. Stored per player on the client. Passengers see the same meter.
  • G on shift, no ride: with a player in the back he gets a metered ride offer (tariff + maximum hold). He accepts → the ride is billed on distance and time like "tell the driver" (cap Config.StreetHail.playerFareCap); he refuses or nobody sits in the back → the meter runs for roleplay only (no money, no XP; mirrored to passengers). U pauses the roleplay meter, O adds an extra charge (player rides / roleplay meter only). G again ends a metered player ride where you stand.
  • NPCs waving at the curb: while you are free on shift and cruising, someone ahead now and then waves for a taxi (Config.StreetHail). Stop next to them; a missed hail costs nothing.

Taxi companies are managed on the driver tablet (/taxi → Company): buy a license at the HQ, invite drivers by player ID, set the commission, deposit / withdraw, buy and assign company cabs. Company cabs are taken at the garage.

Taxi tablet (item)

The driver terminal is the taxi_tablet item: take it from the dispatcher NPC at the taxi HQ, open it by using the item (or /taxi, F6) and start / end your shift on it. Without the tablet on you there is no shift. ox_inventory — add to 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.',
    client = { image = 'tablet.png' },
},

qb-core / ESX: add a taxi_tablet item to your shared items / items table. Disable the whole system with Config.Tablet.enabled = false (the HQ duty point then starts / ends the shift as before).

Key bindings

Rebindable in Settings → Key Bindings → FiveM:

ActionDefault
Driver dashboard (/taxi)F6
Accept ride requestY
Decline ride requestN
Cancel current rideunbound
Dialogue / event answers 1 / 2 / 3 / 4Y / N / J / K
Drop the current event task/nstaxi_canceltask
Taximeter start / stop (street hail offer with a player in the back)G
Pause the roleplay meterU
Add an extra chargeO

Exports (so far)

-- server
exports['ns-taxi']:GetDriverProfile(source) -- summary table | nil
exports['ns-taxi']:IsOnShift(source)        -- boolean
exports['ns-taxi']:GetDriverLevel(source)   -- number | nil
exports['ns-taxi']:GetAchievements(source)  -- { list, unlocked, total } | nil
exports['ns-taxi']:GetCompany(source)       -- { id, name, grade, bank, commission } | nil
-- client
exports['ns-taxi']:IsOnShift()
exports['ns-taxi']:GetProfile()

Cart

Your cart is empty.