The Multi-Floor Problem in GTA V
GTA V has incredible-looking tall buildings, almost none of which are actually usable. Teleporting players between floors feels cheap and breaks immersion. MLO floors require expensive custom interiors and still usually break physics at the transitions. Agency-Elevator is our answer: a real elevator mechanic that feels like an elevator, works on any building, and hooks cleanly into your server's script ecosystem.
How It Feels Right
The elevator has three beats: entry animation, ascent with subtle camera movement and ambient sound, and doors opening at the destination floor. That sequence takes six seconds — long enough to feel real, short enough to not feel like waiting. The sound design matters: a soft mechanical hum, the gentle ding at your floor. Players rarely notice any of it consciously, which is exactly the point.
Configuring New Elevators
Adding a new elevator takes five lines of config: entry coordinates, destination coordinates per floor, floor labels, an optional permission check function. No MLO editing, no interior streaming tricks. Paste your coordinates, assign your floors, done. We've had server owners set up 12-floor office buildings in under ten minutes.
Access Control That Actually Works
Job-based floor access is first-class. The lobby is public, floors 5-10 require a building manager keycard, and the penthouse needs a specific character ID. These rules evaluate instantly against any framework's player data — no waiting on database lookups that would slow the elevator transition.
Why It's a Standalone Favorite
Agency-Elevator is framework-agnostic out of the box. It doesn't care if you're running QBCore, ESX, or a standalone custom stack — the permission hooks are pluggable functions, not framework imports. This is why it's been one of our most downloaded scripts across all three communities.
Installation & Setup
Agency-Elevator has no database dependency for basic operation. Download from Tebex, drop the folder into your resources directory, and add ensure agency-elevator to server.cfg. Elevator definitions — entry coordinates, floor destinations, labels, and access rules — all live in config.lua.
The default config ships with elevator definitions for several accessible vanilla GTA V buildings (the FIB lobby, Maze Bank Tower entrance, apartment building entries). Replace or supplement these with your server's custom building coordinates. Each definition takes under five minutes to configure.
Configuration Options
The config.lua covers elevator behavior and access control:
- Elevator definitions — array of elevators, each with a name, entry trigger coordinates and radius, and an array of floor destinations.
- Floor destinations — each floor has coordinates, a display label, and an optional access function.
- Access function — a Lua function per floor that receives player src and returns true/false. Use this to check job, item, or character ID conditions.
- Transition duration — how long the ascent/descent animation takes in milliseconds. Default: 6000 (6 seconds).
- Ambient sound — toggle the elevator mechanical hum and floor ding sounds. Default: enabled.
- Camera behavior — subtle camera tilt during transition for motion effect. Default: enabled, configurable intensity.
- UI style — the floor selection panel visual (minimal vs. detailed with floor descriptions).
Framework Compatibility
Agency-Elevator is fully standalone by design. The access control functions in your config can call any framework's player data — QBCore, ESX, or custom. No framework imports live in the base resource. This is why it's been one of the most consistently downloaded Agency scripts across all three server communities: it works without any special setup regardless of your stack.
Why This Matters for Roleplay
Vertical space is one of the most underused dimensions in GTA V RP. The map has dozens of impressive tall buildings and multi-story interiors. Without working elevators, those spaces are either inaccessible or accessed through immersion-breaking teleports. Agency-Elevator opens that vertical space to RP without the jarring cut of a teleport.
The six-second transition isn't padding — it's purposeful pacing. Elevator rides in roleplay are micro-scenes. A detective and a suspect, both riding to the 12th floor, have six seconds of enforced proximity. Business partners riding to a meeting have six seconds of incidental conversation time. These brief interactions are the texture of RP, and a working elevator creates them naturally rather than skipping past them.
The access control layer enables building hierarchy RP. A corporate tower where the lobby is public, floors 5-20 require an employee keycard, and the executive floor requires a specific character — that's an organization with spatial structure. When physical access matches organizational access, the building becomes a genuine in-character territory rather than just scenery.
Custom MLO interiors are where this script delivers the most value. A server with a custom police department MLO, a hospital MLO, or a custom skyscraper business district can make every floor of those interiors accessible and navigable without any client-side packing of new streaming ranges. The elevator transitions between existing interior zones handle the rest.
Frequently Asked Questions
Can two players use the same elevator simultaneously going to different floors?
Yes. Each player's elevator interaction is independent. If player A calls the elevator to floor 5 and player B calls it to floor 12 from the same entry point, both transitions play simultaneously on each player's client. The elevator doesn't have simulated capacity or wait time — it's a per-player transition, not a shared physical object.
Can we add an NPC operator or keypad prop to the elevator?
The trigger zone doesn't require any specific prop — it's coordinate-based. You can place whatever prop you want at the entry coordinates (a keypad, a reception desk, an NPC) using your server's prop placement tools. The elevator interaction fires when the player enters the trigger radius, regardless of what's physically there.
Does this work with elevators inside custom interior streaming resources?
Yes. Interior coordinates work identically to exterior coordinates in the config. Make sure you use the interior-space coordinates (which you get from being inside the interior in-game) rather than the exterior building coordinates. If your interior uses a custom interior ID, pass it in the floor definition and Agency-Elevator loads the player into the correct interior on transition.
Can the elevator be locked entirely during certain RP events?
Use exports['agency-elevator']:LockElevator(elevatorName, reason) from any server script. Players attempting to use the elevator during the lock see a "currently unavailable" message. Unlock with exports['agency-elevator']:UnlockElevator(elevatorName). Use this for scripted events where uncontrolled floor access would break the scene.
Requirements
- FiveM server (any framework or standalone)
- cfx.re account with valid Agency-Elevator license
- No database dependency for basic operation
- No external resource dependencies
