Los Santos Transit — A Physical Ticket Kiosk Inside the Game World

A fully integrated public-transport ticketing terminal for FiveM, rendered as a live DUI runtime texture on a physical 3D kiosk model with custom virtual camera cursor, calendar passes, and authoritative server economy.

3D Prop DUI TextureVue 3 · Pinia · TypeScriptVirtual Camera CursorQBX & ox_inventory Economy

Do not make the player open a ticket-machine menu. Make the ticket machine itself become the interface.

The goal was not to create another fullscreen overlay. I wanted the player to walk up to a physical ticket machine in the world, look at its actual screen, and interact with it as if the object itself were running the application. The interface, 3D prop UV mapping, camera framing, cursor translation, and backend economy all had to cooperate to make one interaction feel natural.

00:00 / 00:00
Physical 3D Prop
Scripted Camera Frame
Virtual Input Cursor
1024×580 DUI Canvas
Authoritative ox_inventory
Global Model Replacement

From raw in-game camera deltas to real-time contactless banking and inventory transactions.

01 / Terminal Dashboard & Transit Map

Designing the interface as a physical object

A fixed 1024×580 UI layout with clear hierarchy, large touch targets, Metro rail route map, ticket options, contactless Tap & Go, accessibility, and bilingual support.

Designing the interface as a physical object
02 / Ticket Sales & Pricing

Direct single, return, and group purchasing

Streamlined purchasing flow with authoritative server validation, balance verification, and inventory delivery via ox_inventory.

Direct single, return, and group purchasing
03 / Multi-Day Calendar Passes

Multi-day passes as an interaction, not a dropdown

Players select travel days directly on a dynamic calendar enforcing continuous date ranges and calculating proportional fares automatically.

Multi-day passes as an interaction, not a dropdown
04 / Contactless Tap & Go

Account-linked transit cards with daily caps

Contactless card payments linked to the player's bank account with automatic daily ($8.00) and weekly ($32.00) spending caps resetting at midnight.

Account-linked transit cards with daily caps
05 / Customer Support & Help

Station status and accessibility services

Integrated support hotline, interactive FAQ accordion, station operational statuses, and high-contrast accessibility options.

Station status and accessibility services
06 / Modular Config Architecture

Config.lua designed for zero-friction server deployment

Centralized configuration controlling prop model names, DUI dimensions, camera offsets, virtual cursor sensitivity, ticket prices, and Tap & Go spending caps.

Config.lua designed for zero-friction server deployment (part 1 of 3)
Config.lua designed for zero-friction server deployment (part 2 of 3)
Config.lua designed for zero-friction server deployment (part 3 of 3)

Under the hood

Runtime DUI Texture & 3D Prop UV Mapping

The Vue 3 application renders at 1024×580 into a DUI browser and replaces the screen texture on the modified prop_train_ticket_02.ydr in real-time, allowing nearby players to see the active terminal.

Virtual Camera Cursor & Scripted FOV

Translates raw camera delta input from the game engine into browser coordinates (SendDuiMouseMove), with an in-game /dmetrotune tool for live camera positioning and framing.

Authoritative Server Economy & Inventory

Full backend validation via QBX and ox_inventory. Purchases, contactless Tap & Go daily/weekly spending caps, and automatic refunds on inventory overflow are handled on the server.

0×580Physical Kiosk Resolution
0%Server-Authoritative Economy
0 FPSDUI Texture Refresh Rate
0-ClickConfig.lua Customization
The player should feel like they are operating a machine, not opening a menu.