In-Game Dashboard & Commands
All individual elevator configurations are managed in real-time via the In-Game React Dashboard — no file editing or server restarts required.
Opening the Dashboard
/elevator_panelYou must have the command.elevator_admin ACE permission. See the Installation guide for details.
Press ESC at any time to close the dashboard.
Control Center (Overview)
The main screen shows a live summary of all elevators on the server.
| Stat Card | Description |
|---|---|
| Total Systems | Total number of elevators registered in the database. |
| Operational | Elevators that have at least one floor configured and are not currently broken. |
| Faulty Nodes | Elevators that are currently broken and require maintenance. |
| System Drafts | Elevators that have been created but have no floors configured yet. |
Click any stat card to filter the list by that category. Use the search bar to filter by ID, Label, or Type.
Click New Elevator to create a new elevator with a default configuration. It will be assigned an auto-incremented ID (e.g., Elevator_001).
Click any elevator card to open the Config Editor. The trash icon on a card deletes it immediately after confirmation.
View toggle — Map / Cards
A segmented control in the dashboard header switches the Control Center between Cards (the grid above) and Map — your whole fleet plotted on the world map. The map supports drag-to-pan, scroll-to-zoom (and +/− buttons), and clusters nearby elevators into a single marker that expands into a list when clicked. Whichever view you pick is remembered for next time you open the dashboard.
Sidebar — Theme Creator & Knowledge Base
Two extra entries sit in the dashboard's left sidebar alongside the Control Center:
- Theme Creator — build Custom Themes without touching code.
- Knowledge Base — the existing in-game Help Center.
Config Editor
Clicking an elevator opens a multi-tab modal editor. Changes are only applied to the server when you click "Apply Changes" in the footer. Applied changes are instantly synced to all connected players.
Clicking "Delete System" permanently removes the elevator from the database. This action cannot be undone.
Tab: General
Core identity settings for the elevator.
| Field | Description |
|---|---|
| Unique System ID | A read-only identifier automatically assigned on creation (e.g., Elevator_001). Used internally to reference the elevator. |
| Registry Identification (Label) | A human-readable display name shown in the dashboard list and elevator UI (e.g., SKYCLUB_ELEVATOR_A). Optional but recommended. |
| Default Reach Distance (m) | The default interaction distance in meters for all floors of this elevator, unless overridden per-floor in the Floors tab. Range: 0.5 – 10. Default: 2.5. |
| Kind (v3.1) | Standard or Vehicle. Setting Vehicle unlocks the Vehicle tab and lets drivers ride the elevator from inside their car. |
v3.1: the visual style picker that used to live here (Metal/Wood/Gold) moved to the new Appearance tab as the Elevator Theme card, alongside the new Panel Design picker.
Tab: Interaction
Controls security bypass and malfunction behavior for this specific elevator.
Unauthorized System Hacking
| Field | Description |
|---|---|
| Toggle (Hackable) | When enabled, players can use the hacking item (defined in config.lua > MBT.Hacking.Item) to bypass floor-level job/item restrictions. |
| External Hacking Anchor (Optional) | A world coordinate where the hacking interaction takes place (e.g., an external keypad or terminal). Click 📍 to close the UI and aim at a world position, then press [E] to capture. If left at 0,0,0, the hack is triggered from the elevator itself. |
Integrity Failures (Maintenance)
This section is grayed out if MBT.Maintenance.Enabled = false in config.lua.
| Field | Description |
|---|---|
| Toggle (Breakable) | When enabled, this elevator can randomly break down during use, becoming temporarily unusable until repaired. |
| Breakdown Chance (%) | The probability (0–100) of a breakdown occurring each time the elevator is used. Leave blank to use the global default defined in config.lua > MBT.Maintenance.Chance. |
Tab: Vehicle (v3.1)
Only shown when Kind (General tab) is set to Vehicle.
Controls who can ride this elevator from inside a car, and how the ride behaves.
Admission Rules
| Field | Description |
|---|---|
| Vehicle Whitelist | If non-empty, ONLY these vehicle models can board. Whitelist always wins over blacklist (here and in config.lua). |
| Vehicle Blacklist | Vehicle models barred from this elevator. Ignored if a whitelist (global or per-elevator) is active. |
| Allowed Vehicle Classes | Multi-select of GTA vehicle classes (Compacts, Sedans, SUVs, Commercial, etc.). Leave empty to allow every class. |
| Max Vehicle Size | Any / Small / Medium / Large — caps the vehicle's bounding box. Small ≈ compacts/motorcycles, Medium ≈ sedans/SUVs/pickups, Large ≈ vans/box trucks. |
Access Control
| Field | Description |
|---|---|
| Plate Whitelist | If non-empty, only listed plates can ride. Matching depends on how your garage/plate script formats plates. |
| Owner only | Restricts the ride to the vehicle's registered owner, checked against your framework's garage DB (ESX / QBCore-QBox / ox). Point config.lua > MBT.Vehicle.OwnershipExport at a custom export if your garage isn't one of those. |
| Require vehicle | When on, this elevator can only be used from inside a vehicle — on-foot use is blocked. Off by default. |
Only the driver can start a Vehicle elevator ride — passengers are carried along automatically (passenger sync) but can't initiate it.
Tab: Floors
Defines the physical floors of the elevator — their positions in the world and individual access rules.
Click Add Floor to add a new floor entry. Each floor is represented by a card.
Floor Card Fields
| Field | Description |
|---|---|
| Level ID | A numeric identifier for the floor (e.g., 0, 1, 2). Used to order floors in the elevator UI. |
| Registry Label | The public-facing name shown to players in the elevator floor selector (e.g., Ground Floor, Rooftop). |
| Position (📍) | The world coordinates where the player is teleported when selecting this floor. Click 📍 to capture from the game world. The captured heading also sets the parking direction for Vehicle elevators arriving on this floor. |
Click ⚙️ (Advanced Protocols) to open the floor's side panel with additional settings.
Floor Advanced Panel — Terminal Interfacing
Defines how players interact with this floor's elevator panel/terminal in-game.
Interaction Vector — Choose the interaction mode:
- Volumetric Box — An invisible 3D box zone placed in the world.
- Static Object — Targets a specific static map entity (prop) as the interaction point.
Volumetric Box settings:
| Field | Description |
|---|---|
| Coordinate Calibration (📍) | The center position of the interaction box. Click 📍 to capture. |
| Volume Dimensions (W / D / H) | Width (X), Depth (Y), and Height (Z) of the interaction box in meters. Default: 1 / 1 / 1. |
| Distance | How close the player must be to the box to trigger the interaction prompt. Default: 2.5. |
| Rotation | The yaw rotation of the box in degrees (0–360). Use this to align the box with angled walls or panels. |
Static Object settings:
| Field | Description |
|---|---|
| Technical Signature (Model Hash) | The model hash of the target entity. Click 📍 to aim at the object in-game and capture its hash automatically. |
Floor Advanced Panel — Door & Button Panel (v3.1)
| Field | Description |
|---|---|
| Elevator Door (Standard) / Vehicle Door (Vehicle elevators) | Optional per-floor door prop. Click 📍, aim at the door in-world and capture its position and rotation. Shows "Not placed" until captured; use the × button to clear it. |
| Button Panel | Optional in-world button panel prop, placed independently from the floor's interaction zone above. Same capture flow: 3-axis rotation plus fine offset controls, with a live WYSIWYG preview of the placement before you confirm. |
Floor Advanced Panel — Access Protocols
Per-floor access restrictions. If no jobs or items are configured, the floor is accessible to everyone.
| Field | Description |
|---|---|
| Authorized Departments (Jobs) | Add job entries. Each entry requires a Job Name (exactly as defined in your framework, e.g., police) and a minimum Grade (number). Players with that job at or above that grade can access this floor. Click + Add Job to add. |
| Required Keycards / Items | Add item names that a player must have in their inventory to access this floor. Type the item name and press Enter or +. Multiple items are OR-checked (player needs at least one). |
Tab: Permissions
Global access rules that apply to the entire elevator, regardless of the individual floor being selected.
Entry & Usage Permissions
| Field | Description |
|---|---|
| Global Access Whitelist (Jobs) | If any jobs are listed here, only players with those jobs (at or above the specified grade) can open the elevator menu at all. Leave empty to allow anyone. |
| Global Required Keycards / Items | If any items are listed, players must have at least one of them in their inventory to use the elevator. Leave empty to allow anyone. |
Time-Based Access
| Field | Description |
|---|---|
| Operating Hours (Toggle) | When enabled, the elevator is only usable during the specified in-game server hours. Outside those hours, the elevator is locked. |
| Opening Hour (0–23) | The in-game server hour at which the elevator becomes accessible. Uses 24-hour format. |
| Closing Hour (0–23) | The in-game server hour at which the elevator locks again. |
Example: Opening 8, Closing 20 means the elevator is only usable from 8:00 AM to 8:00 PM in-game time.
Tab: Appearance
v3.1: this tab gained three new cards — Elevator Theme, Panel Design, and Panel Position — described below. The GTA marker settings further down still apply when MBT.UseTarget = false in config.lua, or alongside a target zone.
Elevator Theme
The visual style and ambient sound used during the ride — this is where the Type picker that used to live in the General tab moved to. Pick from the built-in themes (Metal, Wood, Gold, Garage) or any Custom Theme you've created.
Panel Design
Choose the button-panel layout rendered in the elevator UI, plus a Dark/Light color variant. Seven designs are available:
| Design | Suggested for |
|---|---|
| Standard | Office · Residential |
| Minimal Luxury | Penthouse · Refined |
| Corporate Modern | Office · Tech HQ |
| Obsidian Arc | Premium · Modern |
| Brutalist Monochrome | Cop · Government |
| Art Deco Grand | Casino · Heritage |
| Industrial Freight | Warehouse · Freight |
Panel Position
A live, in-dashboard preview of the elevator panel — drag it to move, drag a corner to resize, and scroll to rotate, with the result matching exactly what players see in-world.
Marker (GTA Map Blip)
Controls the visual GTA V marker drawn at the elevator interaction point. Only relevant when MBT.UseTarget = false in config.lua, or used in addition to a target zone.
| Field | Description |
|---|---|
| Marker ID | The GTA V marker type to render. Click the list icon to see available presets (e.g., 23 = Horizontal Circle Thin, 1 = Vertical Cylinder). |
| Tactical Color Tuning | Opens an HSV color picker. Drag the gradient to set Hue/Saturation/Value. Use the sliders below for precise Hue and Alpha control. Also supports direct R/G/B/A input fields (0–255). |
| Marker Rotation (X, Y, Z) | Rotates the marker in 3D space. Most markers only respond to Z rotation. |
| Marker Scale (X, Y, Z) | Sets the size of the marker. Default is 1.0 on each axis. Increase to make it larger, decrease for a smaller footprint. |
Theme Creator (v3.1)
A separate page in the dashboard sidebar (next to Control Center) for building your own elevator theme without touching code.
| Field | Description |
|---|---|
| Display Name | The theme's name shown in the Elevator Theme picker. Up to 128 characters. |
| Identifier | Auto-generated slug from the display name, locked once the theme is created. Internal format: _custom_<slug>. |
| Kind | Standard or Vehicle — restricts which elevators this theme is offered to in the picker. |
| Background Image URL | A direct HTTP(S) link to the panel background image. Validated on blur before saving. |
The right-hand Live Preview mirrors the Panel Position editor — drag to move, drag a corner to resize, drag the top handle to rotate (±45°) — with 16:9 / 21:9 / 4:3 aspect ratio presets so you can match your image.
A theme that's still assigned to an elevator can't be deleted — reassign or remove those elevators first.
Activity Log (v3.1)
Requires MBT.Logs.Enabled = true in config.lua (default: enabled).
Each elevator's side panel includes a paginated log of everything that happened to it: created, updated, deleted, duplicated, broke, repaired, hacked, and (if MBT.Logs.LogRides = true) every ride. Each row shows the event type, who did it (when known), a detail snippet, and a timestamp. Set MBT.Logs.Keep to control how many rows are kept per elevator, and MBT.Logs.Webhook to also mirror entries to a Discord webhook.
config.lua Reference
The config.lua file controls global, server-wide settings. Individual elevator settings (floors, access, appearance) are managed from the Dashboard.
General
MBT.Language = 'en'
MBT.Debug = false
MBT.UseTarget = true| Key | Description |
|---|---|
MBT.Language | Language for all player-facing strings. Options: 'en', 'it', 'es'. You can add your own language file in the locales/ folder. |
MBT.Debug | Enables verbose debug logging in the console and browser DevTools. Set to false in production. |
MBT.UseTarget | If true, uses your target system (e.g., ox_target) for elevator interactions instead of proximity markers. Both can coexist. |
MBT.AdminSettings
MBT.AdminSettings = {
Command = 'elevator_panel',
DefaultKey = 'F12',
Permission = 'command.elevator_admin',
}| Key | Description |
|---|---|
Command | The chat command used to open the admin dashboard. Default: elevator_panel. |
DefaultKey | The default keybind to open the dashboard. Players can remap it in their GTA V key settings. Default: F12. |
Permission | The ACE permission required to open the dashboard. Default: command.elevator_admin. See Installation for how to grant it. |
MBT.General
MBT.General = {
InteractKey = 'E',
DetectDistance = 2.0,
MarkerDistance = 3.0,
HintDistance = 1.5,
DisplayHint = true,
TimezoneOffset = 0,
VehicleInteractDistance = 4.0,
}| Key | Description |
|---|---|
InteractKey | The keyboard key used to interact with elevators (default: E). |
DetectDistance | Distance (meters) at which the script starts detecting a nearby elevator. Lower = better performance, higher = earlier detection. |
MarkerDistance | Distance at which visual markers are rendered. Ignored if UseTarget = true. |
HintDistance | Distance at which the "Press E to use" hint appears. Should be ≤ DetectDistance. |
DisplayHint | Set to false to globally disable all proximity hints. |
TimezoneOffset | UTC offset in hours used for timed elevator access. E.g. 2 for UTC+2, -5 for UTC-5. Default: 0. |
VehicleInteractDistance | (v3.1+) Distance (meters) at which the "Press E" prompt appears for Vehicle elevators when the car is at the elevator. Default: 4.0. |
New in v3.1: the dashboard gained a "Control Room" layout, a fleet map view, per-elevator activity logs, a Panel Designs picker, a Custom Theme editor, in-world button panel placement, and a brand-new Vehicle Elevator type. See the Introduction page for the full list — detailed field-by-field docs for these new dashboard tabs are coming soon.
MBT.Seeding
MBT.Seeding = {
SkyclubV3 = true,
SkyclubV2 = false,
}| Key | Description |
|---|---|
SkyclubV3 | If true, seeds the database with pre-built Skyclub V3 elevators on first start. |
SkyclubV2 | If true, seeds with Skyclub V2 elevators instead. |
Set both to false once the initial seed has run, or if you want to start from scratch.
MBT.ElevatorSettings
MBT.ElevatorSettings = {
Watermark = true,
HideGaps = false,
Speed = 1000,
MaxPlayers = 0,
-- v3.1
VehicleBlacklist = {
-- "lazer", "hydra", "titan", "adder",
},
VehicleWhitelist = {
-- "adder", "zentorno",
},
}| Key | Description |
|---|---|
Watermark | Shows or hides the MalibuTech branding watermark in the elevator UI. |
HideGaps | If true, the elevator panel only shows buttons for configured floors, hiding any floor numbers in between. Useful for sparse floor setups (e.g., floors 0, 5, 12). Default: false. |
Speed | Controls the floor-change animation duration in milliseconds. 100 = very fast, 2500 = very slow. Default: 1000. |
MaxPlayers | Global default for the maximum number of occupants allowed per elevator ride. 0 = unlimited. Can be overridden per elevator in the Dashboard. |
VehicleBlacklist (v3.1) | Vehicle models barred from every Vehicle elevator on the server. Can be extended per-elevator in the Vehicle tab. |
VehicleWhitelist (v3.1) | If non-empty, only these models can board any Vehicle elevator. A whitelist (global or per-elevator) always beats a blacklist. |
MBT.Vehicle (v3.1)
MBT.Vehicle = {
OwnershipExport = "",
}| Key | Description |
|---|---|
OwnershipExport | Used by the per-elevator Owner only toggle. Empty = check the standard ESX / QBCore-QBox / ox garage DB. If your garage script is non-standard, point this at "resource:exportName" — an export that takes a plate and returns the owner's id. |
MBT.Logs (v3.1)
MBT.Logs = {
Enabled = true,
Keep = 100,
LogRides = false,
Webhook = '',
}| Key | Description |
|---|---|
Enabled | Master switch for the per-elevator Activity Log shown in the admin dashboard. |
Keep | Max rows kept per elevator (oldest pruned first). Raise this if you turn on LogRides. Default: 100. |
LogRides | If true, every ride is logged too — high volume, off by default. |
Webhook | Optional Discord webhook URL to also mirror logged events. Empty = disabled. |
MBT.Technical
MBT.Technical = {
BucketRange = { 1, 800 },
InviteTimeout = 10000,
SyncDelays = {
BeforeTeleport = 300,
AfterTeleport = 150,
UIClose = 800
},
Maintenance = {
ParticleDistance = 100.0,
RepairDistance = 3.0,
}
}| Key | Description |
|---|---|
BucketRange | The min/max range for server-side routing buckets used during teleportation. {1, 800} means a random bucket between 1 and 800 is used per ride. |
InviteTimeout | How long (ms) a co-op elevator invite remains valid before it auto-expires. |
SyncDelays.BeforeTeleport | Milliseconds to wait after bucket assignment before setting the player's coordinates. Allows the server to sync. |
SyncDelays.AfterTeleport | Milliseconds to wait after teleport before unfreezing the player. Allows collision and world to load. |
SyncDelays.UIClose | Milliseconds to wait after unfreezing before hiding the elevator NUI. Prevents the UI from disappearing too abruptly. |
Maintenance.ParticleDistance | Maximum distance (meters) at which malfunction visual effects (sparks, smoke) are spawned for nearby players. |
Maintenance.RepairDistance | How close a player must be to the elevator to attempt a repair. |
MBT.Hacking
MBT.Hacking = {
HackingCooldown = 66,
AlarmChance = 80,
Item = "laptop",
KeepItem = false,
SendAlarm = function(coords) ... end,
}| Key | Description |
|---|---|
HackingCooldown | How long (seconds) the elevator stays unlocked after a successful hack. After this, the floor locks again. |
AlarmChance | Probability (0–100) that the alarm/dispatch callback fires when a hack fails. Default: 80. |
Item | The inventory item name required to start a hack. Must be a valid item in your inventory system. Default: "laptop". |
KeepItem | If true, the hacking item is not consumed on a successful hack. Default: false. |
SendAlarm | A function called when a hack attempt triggers an alarm. Add your dispatch/alert logic here (e.g., notify police). |
The TimeLimit parameter (commented out by default) overrides the minigame time limit from mbt_minigames.
MBT.Maintenance
MBT.Maintenance = {
["Enabled"] = true,
["Chance"] = 10,
["RepairAccess"] = {
["jobs"] = { ["mechanic"] = 0 },
},
["RepairRules"] = {
["mechanic"] = { ConsumeItem = false, MinigameDifficulty = "easy", InspectionDuration = 1500 },
["default"] = { ConsumeItem = true, MinigameDifficulty = "hard", InspectionDuration = 5000 },
},
["Faults"] = { ... }
}| Key | Description |
|---|---|
Enabled | Master switch for the malfunction system. If false, no elevator can ever break down regardless of per-elevator settings. |
Chance | Default breakdown probability (%). Used when a breakable elevator has no per-elevator BreakChance set in the Dashboard. |
RepairAccess.jobs | Job(s) and minimum grade required to attempt a repair. e.g., ["mechanic"] = 0 allows all mechanic grades. |
RepairAccess.items | (Optional) Item-based repair access. Uncomment and add item names. |
RepairRules.[job].ConsumeItem | If true, the repair item is removed from inventory on use. |
RepairRules.[job].MinigameDifficulty | Difficulty passed to mbt_minigames. Options: "easy", "medium", "hard". |
RepairRules.[job].InspectionDuration | Duration (ms) of the inspection animation before the minigame starts. |
RepairRules.default | Rules applied to any player not matching a specific job entry. |
Faults — Each fault type (e.g., Electrical, Mechanical, Software) defines:
| Sub-key | Description |
|---|---|
Item | The item required to fix this fault type. |
Minigame | The minigame ID from mbt_minigames to trigger. |
Label / Description | Display text shown in the repair prompt. |
Particle | Visual particle effect spawned on the broken elevator (Dict, Name, Offset, Scale). |
Animation | The repair animation played by the player (Dict, Name, optional Prop, Bone, Offset, Rot). |
MBT.CustomHint
MBT.CustomHint = {
Enabled = true,
Looped = true,
Position = 'bottom-center',
Show = function(label) ... end,
Hide = function() ... end,
}| Key | Description |
|---|---|
Enabled | Whether to show the proximity "Press E" hint at all. |
Looped | If true, the hint is shown every frame (needed for native GTA hints). Set to false for one-shot UI elements like ox_lib:showTextUI. |
Position (v3.1) | Where the hint appears on screen. One of: 'bottom-center' (default), 'top-center', 'center', 'bottom-left', 'bottom-right', 'top-left', 'top-right', 'center-left', 'center-right'. |
Show | Function called to display the hint. The default preset renders mbt_elevator's own native NUI prompt — no ox_lib required. Commented-out presets are included for ox_lib:showTextUI if you prefer that look. |
Hide | Function called to remove the hint when the player walks away. |
v3.1: the default hint is now rendered by mbt_elevator's own NUI instead of depending on ox_lib's showTextUI.
MBT.Notification
MBT.Notification = function(data)
exports.ox_lib:notify({ ... })
endCustomize which notification system is used. The data object contains: title, description, type, icon, duration. Presets are provided for ox_lib, GTA native, ESX, QBCore, and okokNotify.
MBT.Locale
All text strings displayed to players are defined here. Edit any value to translate or customize messages. The table keys must remain unchanged. Notification entries (like ["not_allowed"]) support layout properties (position, icon, iconcolor, bgcolor, duration) that are passed directly to MBT.Notification.
NUI-only keys:
| Key | Description |
|---|---|
nui_wait | Text shown on the elevator panel while the ride is in progress. |
nui_open | Text shown on the elevator panel call button. |
nui_nearby | Label for the nearby players section in the elevator UI. |
nui_no_players | Text shown when no other players are nearby. |