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).
0.11.4 — in development
Added
/taxitest admin test tools (Config.Debug only): dialogue [id] opens a passenger dialogue now,
remark [speed|brake|crash] triggers a passenger remark, luggage / regular [normal|favorite|grudge] shape the
next /taxiride passenger, skip jumps to the pickup / destination on a test ride (no teleport flag, no reward).
The luggage scene also runs on test rides (without tip / XP).
0.11.3 — in development
Added
Luggage at the pickup: the passenger waits at the open trunk; get out and load the bags (E, progress bar) for a
rating and tip-chance bonus on that ride. Without help the passenger loads them alone after loadSeconds.
Taxi roof sign: lit while you are available on shift, off with a passenger on board (Config.Vehicle.taxiLight).
Rankings app on the tablet: earnings, rides, rating (last 7 days), level (all time) and companies, with a podium,
your own row and your value when you are outside the list (Config.Leaderboard, cached).
Player rating card: custom tip amount (up to maxTip) and an optional note to the driver (noteLength); the driver
sees the note as a subtitle and in his trip log. Database schema v3 (ns_taxi_rides.note, automatic migration).
Changed
Fonts are bundled with the resource (nui/fonts, SIL OFL) instead of loaded from Google Fonts.
Text from players is cut on character boundaries (Turkish letters stay intact).
0.11.2 — in development
Fixed
The passenger vanished inside the cab at the drop-off: the session update (ride cleared) could reach the client
before the drop-off result and deleted the ped. A passenger sitting in the cab is never deleted any more; he
gets out and walks away (also when a ride ends early).
The luggage tag never showed on the call ticket.
Added
Luggage at the drop-off: the passenger waits at the open trunk; get out, stand at the trunk and press E to unload
the bags (progress bar + animation) for a small server-validated extra tip, XP and reputation
(Config.Rides.luggage). Without help the passenger takes the bags himself after helpSeconds.
0.11.1 — in development
Added
Taxi tablet item (Config.Tablet, item taxi_tablet): a dispatcher NPC at the HQ hands out the tablet
(optional deposit) and takes it back. The driver terminal only opens with the tablet on you (item use, /taxi, F6).
Shift on the tablet: start / end the shift with the button in the terminal header (anywhere, or only at the
dispatcher with shiftAnywhere = false). Ending the shift keeps the terminal open.
Losing the tablet (dropped, given away, stored) ends the shift automatically after a short grace period;
handing it back ends the shift and refunds the deposit.
Tablet prop + animation while the terminal is open on foot (Config.Tablet.animation).
Inventory bridge (bridge/inventory.lua: ox_inventory, qb-core / ESX fallback); without an inventory the item
checks are skipped.
Changed
Terminal side menu and pages scroll like a touch screen: no scrollbars, drag with the cursor, momentum and
soft fading edges.
0.11.0 — in development
Added
Customer memory: NPC customers remember their drivers. Regulars call again (often to the same place), greet you
by ride count, favourites rate and tip better, customers you cancelled on hold a grudge. Offer tags
(regular / favourite / remembers you) and a regular customers list on the tablet statistics page.
Player taxi requests: /taksicagir (or the radial menu) opens a call card: recorded places near you, your GPS
mark, or "tell the driver" (taximeter, capped). Nearby drivers get the request first; the caller sees the driver,
plate, ETA, cab blip and live taximeter, pays at the end (bank, then cash, capped) and rates the driver with
1-5 stars and an optional tip. /taksiiptal cancels. Drivers see a "Player" ticket and get the rating + tip.
Taxi companies: buy a license at the HQ (fee, level, city limit) or let an admin create one
(/taxicompany list | create | delete). Boss / manager / driver grades, invitations, firing, promotions,
company bank (deposit / withdraw), commission per fare (0-40%, tips excluded) and a ledger.
Company fleet: the boss buys cabs from the company bank, assigns them to drivers or leaves them for everyone;
drivers take them at the garage. Services and upgrades of company cabs are paid by the company; mileage is tracked.
Tablet Company app (overview, crew, fleet, ledger; license and invitations for non-members).
5 new cab models (Asterope, Washington, Tailgater, Oracle XS, Stretch) and fleet prices for every model.
3 new random events: road rage, paparazzi (premium / VIP passengers), no wallet.
7 new achievements (player rides, 5-star player rides, regular customers, company founder, company rides) and
a new achievement type counter.
The tablet card could stay hidden when one focus card was closed and another opened right away.
0.10.1 — in development
Added
Ride location tool /taxilocations (admin, like the locksmith /lslocations): record exact pickup / drop-off
spots in game (stand where the customer waits, face the street, press E), with name, role
(pickup + drop-off / pickup only / drop-off only), tags and airport flag. Stored in data/locations.json,
live without restart. Coordinates come from the server-side ped position.
Panel with survey map (zoom, focus on selection), search and filters; GPS, teleport, test as pickup /
drop-off, edit, move here, delete; default spots can be disabled / enabled one by one.
World view (/taxilocations view): ghost customers, coloured markers and labels for nearby spots, optional blips.
Recorded spots are used exactly where they were recorded (no sidewalk snapping); drop-off-only spots are never
used as pickups, disabled spots are never used at all (dispatch, events, dialogues).
0.10.0 — in development
Added
22 achievements (data/achievements.lua, editable): rides, distance, earnings, quality, specialist and career
categories in bronze / silver / gold, with XP and capped money rewards. Unlocks are server-side and guarded by
the database (a reward is never paid twice); checks run after rides, after resolved events and on character load.
Unlock toast on screen (medal, tier, reward) and an Achievements app on the driver terminal
(progress bars, category filters, unlock dates, tier counters).
Persistent daily statistics from the ride log: "today" now survives relogs; earnings history chart
(last 7 days, configurable), trip log with the latest rides, logbook with today / shift / career columns.
HUD cards (status bar, call ticket, dialogue, subtitles, toasts) showed a black box around them in game:
backdrop-filter has no game pixels to sample in the NUI layer. Removed it; surfaces are opaque slate now.
0.9.1 — in development
Changed
Driver dashboard redesigned as an in-cab tablet ("driver terminal"): device frame, status bar with the
in-game clock, launcher dock, taxi driver license card, shift meter (LCD), dispatch radio + trip sheet with
progress steps, vehicle diagnostics with gauges and warnings, logbook table, workshop catalog.
Ride offer is now a dispatch ticket: ticket number, pickup distance and ETA, trip tags (airport, VIP, luggage,
night, urgent), passenger likes/dislikes, taximeter-style fare and a countdown ring.
Status bar shows a taxi roof sign (for hire / en route / at pickup / hired) and a live taximeter
(fare, distance, time) while the passenger is onboard.
Ride summary is a printed taxi receipt (company, receipt no., driver, cab, route, fare lines, rating, stamps).
Lighter slate/glass surfaces instead of near-black panels.
Added
Display-only taximeter fare in ns-taxi:cl:rideMeter (fare, estimate); the payout is still calculated at completion.
0.9.0 — in development
Added
NUI driver dashboard (/taxi or F6, ESC to close): home (level, XP, rating, reputation, today),
dispatch (offer accept/decline, active ride, cancel, event task, demand per zone), vehicle (condition bars,
plate, upgrades, GPS to services), statistics (shift + career), upgrades (buy at the garage).
NUI ride HUD: ride offer card with countdown, status bar with passenger, dialogue/event card with key hints,
subtitles and an animated ride summary with level progress.
The native text overlay was replaced by the NUI HUD (no per-frame draw loop while riding).
0.8.0 — in development
Added
8 random events: forgotten item (post-ride delivery task), fare dispute, medical emergency, drunk passenger,
wrong address, extra stop, vehicle issue (flat tyre / engine warning), suspicious passenger / police request.
Event cards with up to 4 options (new 4th answer key K), stop-the-vehicle countdown, task blip and route.
EMS / police / mechanic integration (ps-dispatch, cd_dispatch, custom function, server hook ns-taxi:hook:alert);
options only appear when responders are on duty.
/taxievent [id] admin test command (Config.Debug only). /nstaxi_canceltask to drop an event task.
Server hook ns-taxi:hook:eventResolved (src, eventId, choiceId); eventsResolved driver statistic.
0.7.0 — in development
Added
15 passenger dialogues with personality-dependent effects on rating, tips, XP and preferences (EN/TR).
Tourist sightseeing detour: optional extra stop that is billed and rewarded; skipping a promised stop hurts.
Student discount, VIP discretion, phone-call silence, radio on/off and other conversation outcomes.
Passenger remarks on collisions, hard braking and speeding; greeting when boarding; subtitles + ped speech.
Quiet passengers now reward silent rides, chatty ones reward conversation.
0.6.0 — in development
Added
Cab condition (fuel, cleanliness, exterior, interior, engine) with wear per ride, persisted per cab model.
XP per ride with itemised sources (distance, rating, tip, passenger type, long distance, airport, VIP,
perfect ride, clean driving, night, events) and a per-ride cap; no XP loss.
Reputation gains/losses from passenger ratings with diminishing returns near the top.
Reputation tiers now change dispatch frequency and tip chance.
Level-up notifications with new title, unlocked features and newly available cabs.
Ride summary shows XP, reputation change and level progress.
Driving score from server-side metrics: safety, comfort, route and timeliness (0-100 each).
Passenger rating 1.0–5.0 with personality-aware preferences, dislikes, vehicle condition and incidents,
plus 30 passenger comments (3 variants per situation, EN/TR).
Tip system based on passenger tip chance, rating, perfect rides and event bonuses.
Ride summary card: rating, comment, scores, fare breakdown, tip and total.
Passenger peds streamed near the pickup with personality-based waiting scenarios, waving, boarding into a
free rear seat (trunk opens for luggage) and walking away after drop-off.
Server-validated pickup, boarding and drop-off; live meter (distance / time) during the trip.
Server-side cab tracker: odometer, speeding, hard braking/acceleration, collisions, idle time,
teleport and impossible-trip detection, pickup / boarding / passenger-left timeouts.
Final fare from the measured trip and a restart-safe payout pipeline (ride log before money, payout ceiling).
Integration hook ns-taxi:hook:rideCompleted.
0.2.0 — in development
Added
Shift system at the taxi HQ (start / end with active-ride confirmation).
Server-spawned cabs with statebag ownership, vehicle tiers and level-gated models, key and fuel bridges.
Passenger generation for 15 personality types, destination preferences, dynamic demand zones,
time-of-day periods and full fare calculation (estimate shown on the offer).