Skip to content

Fleet Operations

noteMASTER11 edited this page Jul 21, 2026 · 3 revisions

Fleet Operations

Version 3.2.0 Beta adds a player-owned taxi fleet alongside the normal personal shift. The player can continue driving, open My Fleet from the start screen or the map overlay, and monitor hired drivers without replacing the active passenger, cargo, or refueling state.

Fleet AI is experimental. Every hired car has its own TaxiDriver worker and supervised BeamNG AI instance, so it is more purposeful than an ordinary traffic car but can still hesitate or need intervention on unusual roads, junctions, vehicles, and traffic layouts.

Hiring a vehicle

Two sources are available:

  • Garage: select an installed model/configuration and spawn a separate fleet car near a safe point around the player. The player is not moved into it.
  • Traffic: recruit one of the nearest eligible AI traffic cars. TaxiDriver removes it from the normal traffic pool so BeamNG does not despawn it while employed.

Both paths charge the configured hiring fee and respect the active-driver limit. Dismissing a garage vehicle deletes that spawned car. Dismissing a recruited traffic vehicle returns it to the traffic system where possible.

flowchart TD
  Open[Open My Fleet] --> Source{Hiring source}
  Source -->|Garage| Select[Choose installed model and configuration]
  Source -->|Traffic| Nearby[Choose a nearby eligible traffic car]
  Select --> Validate{Enabled, capacity and funds valid?}
  Nearby --> Validate
  Validate -->|no| Error[Show localized reason]
  Validate -->|yes| Fee[Charge hiring fee]
  Fee --> Own[Detach from player/traffic lifecycle]
  Own --> Worker[Create an independent fleet worker]
  Worker --> Plan[Plan first assignment]
Loading

Job and wage lifecycle

A worker randomly selects from the enabled passenger and delivery categories, builds a road-graph route between the configured minimum and maximum distance, and hands it to an isolated autopilot.lua supervisor. The simplified Fleet AI preset is independent from the detailed player AI Driver preset.

stateDiagram-v2
  [*] --> Planning
  Planning --> Working: route created
  Planning --> Planning: graph temporarily unavailable
  Working --> Resting: physical destination reached
  Resting --> Planning: four-second break ends
  Working --> Unpaid: ten-minute wage cannot be paid
  Unpaid --> Working: wallet can pay wage
  Working --> [*]: dismissed or session ends
  Resting --> [*]: dismissed or session ends
  Unpaid --> [*]: dismissed or session ends
Loading

On completion, the fare is based on driven distance and job time. Only the configured owner share is credited to the player's wallet. Hiring fees and wages are charged separately, so a larger fleet is not automatically profitable.

Default economy:

Setting Default Allowed range
Owner share 35% 10–90%
Hiring fee $75 $0–1,000
Wage per 10 minutes $12 $0–250
Active drivers 6 1–12
Job distance 1.5–8 km 0.5–50 km
World label distance 400 m 50–1,000 m

At least one job category always remains enabled after validation.

Fleet AI presets

Preset Intended behavior
Careful Long following gap, no overtaking or oncoming recovery, conservative exact approach
Standard Obeys speed limits and signals, permits validated overtaking and recovery
Fast Shorter gap, higher aggression, no legal-speed cap, but still obeys traffic signals and collision checks

These presets configure the same underlying supervisor fields used by the player AI Driver: following, braking, rules, overtaking, clearance, reverse recovery, attempt count, and final-approach speed. They are deliberately exposed as three fixed choices to keep background-driver configuration manageable.

Monitoring

The fleet screen provides:

  • total jobs, gross fleet revenue, owner revenue, wages, hiring costs, and net profit;
  • active vehicle, source, passenger/cargo assignment, status, progress, remaining distance, speed, and AI status;
  • a player-centered live map with owned taxis shown as purple markers;
  • access during a personal trip through the purple fleet button over the map;
  • localized world labels identifying an owned taxi and its current activity within the configured range.

The native minimap and Connected Phone canvas use separate rendering integrations but consume the same authoritative fleet marker list from Game Engine Lua. A dedicated map occlusion keeps the Active drivers overlay above the native road renderer.

Persistence and session ownership

/settings/TaxiDriver/fleet.json stores aggregate and per-vehicle statistics:

  • rides, passenger rides, and delivery rides;
  • driven distance;
  • gross revenue and owner revenue;
  • wages and hiring fees.

Active workers themselves are session-scoped. On level/session shutdown TaxiDriver stops their AI, releases recruited traffic vehicles, deletes separately spawned fleet vehicles, restores wrapped minimap functions, and flushes dirty statistics. A stale vehicle ID is removed from the active list instead of being persisted as a live employee.

Implementation map

flowchart LR
  UI[TaxiDriverHUD fleet view] -->|fleet command| Main[taxiDriver.lua]
  Main --> Manager[fleetManager.lua]
  Manager --> Economy[Wallet delta and fleet.json]
  Manager --> W1[fleetWorker #1]
  Manager --> W2[fleetWorker #2]
  Manager --> WN[fleetWorker #N]
  W1 --> A1[autopilot supervisor #1]
  W2 --> A2[autopilot supervisor #2]
  WN --> AN[autopilot supervisor #N]
  A1 --> V1[BeamNG vehicle #1]
  A2 --> V2[BeamNG vehicle #2]
  AN --> VN[BeamNG vehicle #N]
  Manager --> NativeMap[Native purple markers]
  Manager --> Labels[Localized world labels]
  Main --> Publisher[HUD snapshot / Connected Phone]
  Publisher --> WebMap[Canvas purple markers]
Loading

The main distinction is ownership: fleetManager.lua owns economy, persistence, hiring, markers, and lifetime; fleetWorker.lua owns one assignment state; each worker owns a separate autopilot.lua instance and runtime table. No worker shares the player's active trip state.

Clone this wiki locally