NullSect
Systems nominal

Scripts / jobs · v0.13.1

Taxi

NPC and player passengers, a real taximeter, companies and a full career on one tablet.

  • Qbox
  • QBCore
  • ESX

Features

  1. 01

    Real taxi work

    15 passenger types, airport, VIP and night rides, city demand zones and a live taximeter.

  2. 02

    Every ride is a story

    Dialogues and 11 random events, from fare disputes to forgotten items. Every choice changes your tip and reputation.

  3. 03

    Player taxi calls

    Players call a cab from the radial menu and follow their driver live. The fare is held when they get in.

  4. 04

    Career

    Levels, XP, reputation and a driving score. 5 cab tiers, 11 upgrades, 29 achievements and weekly leaderboards.

  5. 05

    Companies

    Player-owned taxi companies with ranks, commission, a company bank and a fleet.

Requirements

Frameworks
Qbox, QBCore, ESX
Requires
oxmysql, OneSync
Works with
ox_lib, ox_target, qb-target, ox / qb / esx inventory, ox_fuel, LegacyFuel, cdn-fuel, ps-fuel, qbx / qb vehiclekeys, ps-dispatch, cd_dispatch
Version
0.13.1

Recent changes

Read the docs →

0.13.1 — in development

Security

  • Admin check: on servers where the ACE check answers 1 / 0 instead of true / false, every player was treated as an admin (0 counts as yes in Lua). On Qbox the fallback admin ACE check had the opposite problem and refused real admins. Both now accept only true or 1 (Utils.AceAllowed).

0.13.0 — in development (taximeter, street hail)

Added

  • New on-screen taximeter with seven-segment digits (DSEG7, SIL OFL): classic LED device with FOR HIRE / HIRED / PAY lamps, waiting time, extras and tariff (day / night / late night), or a slim strip. The meter counts time between server updates, bumps and clicks when the fare goes up and shows PAY with the final fare after the ride.
  • Tablet Settings page: taximeter style (classic / strip / status bar), position, size and sound, with a live preview. Saved per player on the client (KVP).
  • Manual meter (G, rebindable): with a player in the back who did not call, he is offered a metered ride (tariff, maximum hold, accept / refuse card). Accepted rides are billed on distance and time with escrow like "tell the driver" rides; refused or empty-cab meters run for roleplay only (no money, no XP) and are mirrored to player passengers. U pauses the roleplay meter, O adds an extra charge (player rides only). G ends a metered player ride where the cab stands.
  • Street hail (NPC): now and then someone waves at the curb ahead of a free driver (Config.StreetHail). The client only finds the curb; the server checks the spot and assigns the ride. Missed hails cost no reputation.
  • /taksihedef (and the radial item on board): a "tell the driver" / street-hail passenger sends his map mark to the driver as a route; billing stays on the meter.
  • Config.Meter, Config.StreetHail, Config.Features.StreetHail / ManualMeter, new key bindings.
  • Discord log (server/nullsect.lua, Config.Logs): suspicious flags, admin audit rows and payouts from payoutMin are posted to a webhook. The URL is a server convar (set ns_taxi_webhook "...", optional ns_taxi_webhook_<category>), never config.lua, which is sent to the clients. Queued, rate limited, mentions disabled.
  • Update check on start against ns_version_url (fxmanifest) or the nullsect_version_url convar.
  • /nsstatus (admin / console): every running NullSect resource with version, newer version and state.
  • INSTALLATION.md / .tr.md and CONFIGURATION.md / .tr.md.

Changed

  • The server pushes the ride meter every 2 s (was 5 s), including waiting time, extras and tariff.
  • "Tell the driver" rides are billed on the whole ride time, as shown on the meter (the time cap used the 60 s placeholder estimate before).

Fixed

  • Player passengers could miss the PAY screen (and pause / extra changes) of the roleplay meter: a relay sent less than 900 ms after the previous one was refused by the server rate limit. The client now sends it once the gap has passed.
  • The router refuses payloads with NaN / infinite numbers or nesting deeper than 8 levels (NaN passes every range check); Utils.Clamp maps NaN to the minimum.

0.12.0 — in development (Phase 11: security hardening and optimisation)

Security

  • The NPC passenger reported as boarded must be the ped this driver's client spawned (network owner) and of a model of the passenger type; other resources' peds can no longer be tagged and deleted. Arriving at the destination fails when the passenger ped is gone.
  • Repairs are priced again when they finish: damage taken during the service is charged (never below the quote), and the service is bound to the cab it started on.
  • Character / player names are sanitised before they are stored or shown; ~ (GTA text tokens) is stripped from all player text. Company members see each other through opaque references, not framework identifiers.
  • Framework lifecycle events (unload, job change) are ignored when a client triggers them.
  • Soft security flags (expired offer, UI spam, denied admin command) never count towards dropAfterFlags.
  • Location tests (locations:test) are written to the admin audit log.

Economy

  • Player rides: fare escrow. The highest possible fare is held when the caller gets in; the final fare comes out of the hold and the rest is refunded. A caller who cannot cover it is not driven; emptying your accounts or disconnecting on board no longer dodges the fare (a disconnect completes the ride on the distance driven). Config.PlayerRides.escrow.
  • Money owed to an offline player (escrow rest, a driver payout interrupted by a disconnect) is stored and paid on the next login (ns_taxi_refunds).
  • Same caller + same driver again within Config.PlayerRides.pairCooldown (30 min): the fare still transfers, but the driver gets no XP, reputation or rating from it (no farming with a second account).
  • Forgotten item "return it": only counts after the cab has left the drop-off (returnArmDistance, 150 m); the owner waits there for the item.
  • Test rides give no event XP / reputation and do not count towards achievements (police report, event choices, follow-up tasks).
  • The tablet deposit is only refunded when it was paid at the dispatcher (per-character ledger).
  • Companies: disband waits for commissions / deposits still on their way to the database; maxCompanies / maxMembers hold under simultaneous requests; a membership written while the company was disbanded is removed. Optional Config.Fleet.serviceGrade for services paid from the company bank.
  • Achievement rewards go to the character that earned them when a character switch happens during the unlock.

Performance

  • Dashboard refresh no longer runs achievement counters (3 SQL queries every 5 s per open tablet); counter values are cached per character and invalidated by rides / events.
  • Database schema v4 (automatic migration): covering indexes for achievement counters and leaderboards, company log purge index, regulars list rewritten as two index range scans; recent rides / company log order by time.
  • Tablet: unchanged refreshes are not redrawn, pages that do not use the refresh only update the header, fields you are typing in are never reset. The stop countdown reaches the NUI once per second instead of 4x.
  • Luggage props and passengers still getting out are removed on shift end / resource stop.
  • Cooldown tables keyed by character are pruned (no growth over uptime).

Related

Cart

Your cart is empty.