π NEXT-GEN ELEVATOR & GARAGE SYSTEM V1.5.1 β Built on ox_core & StateBags!
π RDE ELEVATORS | Next-Gen Elevator & Garage System for FiveM ox_core | Vehicle Mode | Cinematic | StateBag-Synced | Production-Ready
Built by Red Dragon Elite | Free Forever | No Paywalls | No Legacy
π Installation β’ βοΈ Configuration β’ π Vehicle Mode β’ π‘ Admin System β’ π‘ Exports β’ π Troubleshooting β’ π Website
Every other elevator script is either paid, a 200-line ESX relic, or breaks the moment two players touch it.
We said no.
| β Other Elevator Scripts | β rde_elevators |
|---|---|
| Static teleport, no sync | Real-time StateBag sync across all clients |
| Driver only β passengers get left behind | Full multiplayer vehicle sync, all seats |
| Breaks in IPL interiors (passengers see nothing) | IPL Passenger Interior Fix β portal-culling activated for all seats |
| ESX / QBCore bloat | ox_core only β the future, not the past |
| Admin creates elevators in a config file | Live in-game CRUD admin β no server restart |
| 0.5ms+ idle usage | < 0.01ms idle β event-driven, no polling |
| One floor type fits all | VIP floors, job-locked floors, vehicle-only floors |
| Paid or locked down | 100% free forever β RDE Black Flag |
- π Full Elevator System β unlimited elevators, unlimited floors, live CRUD admin
- π Vehicle Mode β drive your car into the elevator, it teleports with you. All passengers sync
- π¬ Cinematic Mode β fake camera, particle effects, shake, door animation on vehicle entry
- π₯ Full Multiplayer Sync β all vehicle seats tracked, every passenger teleported server-side
- π Floor Access Control β VIP flags, job locks, grade requirements per floor
- π§ Maintenance Mode β lock any elevator instantly, admins can still use it
- πΊοΈ Blip System β per-elevator minimap blips with state colours, per-elevator visibility toggle
- π Floor Occupancy β real-time player count per floor shown in the menu
- π― ox_target Zones β box zones per floor, icon adapts to elevator state
- π Cooldown System β configurable, admin bypass, per-player
- π Multilanguage β EN / DE out of the box, add any language in minutes
- π‘ Server-Side Authority β all sensitive actions validated server-side
- βοΈ Zero-Config Start β sensible defaults, tables auto-create, no SQL import needed
- π GTA V Engine Fix β IPL interior portal-culling manually activated for passengers (v1.5.1)
Drop a PR with your screenshots!
oxmysql β https://github.com/overextended/oxmysql
ox_lib β https://github.com/overextended/ox_lib
ox_core β https://github.com/overextended/ox_core
ox_target β https://github.com/overextended/ox_target
cd resources
git clone https://github.com/RedDragonElite/rde_elevators.git# Dependencies first β order matters!
ensure oxmysql
ensure ox_lib
ensure ox_core
ensure ox_target
# The elevator system
ensure rde_elevatorsEdit shared/config.lua β sensible defaults work out of the box. See Configuration.
That's it. No SQL import needed β tables auto-create on first run.
shared/config.lua is fully self-documented. Key sections:
-- Master debug toggle
Config.Debug = false
-- Admin groups
Config.AdminSystem = {
AdminGroups = { 'admin', 'superadmin', 'mod', 'god', 'management', 'owner' },
AcePermission = 'rde_elevators.admin',
steamIds = {
'steam:110000101605859', -- add your steam ID here
},
}
-- Language: 'en' or 'de'
Config.DefaultLanguage = 'en'
-- UI mode: true = NUI | false = ox_lib context menus
Config.UseNUI = false
-- Cooldown between elevator uses
Config.Cooldown = {
Enabled = true,
Duration = 5000, -- ms
AdminBypass = true,
}When vehicle_mode = true is set on an elevator, players can drive into it and the entire vehicle teleports to the target floor.
- Player drives vehicle onto the elevator target zone
CanVehicleUseElevator()validates class + length- Fade out / cinematic camera (if
CinematicMode = true) - Driver's client notifies server via
rde_elevators:vehicleTeleport - Server resolves all passengers by seat, notifies each client individually
- Driver's client teleports the vehicle entity
- Passenger clients re-seat themselves after confirming vehicle position
- All clients call
LoadInterior()+IsInteriorReady()for IPL interiors - Fade in β everyone's on the new floor
Config.Vehicle = {
Enabled = true,
CinematicMode = true,
MaxVehicleLength = 12.0, -- metres (blocks trucks, trailers)
AllowedClasses = {
[0] = true, -- Compacts
[1] = true, -- Sedans
-- ... configure per class
[14] = false, -- Boats
[16] = false, -- Planes
},
}tl;dr: passengers now see IPL interiors in 3rd-person. This was a GTA V engine limitation.
GTA V's portal-culling system only activates the interior renderer when a ped physically crosses a portal boundary. Passengers placed into vehicles via SetPedIntoVehicle β or already seated when the driver enters a bob74_ipl / RequestIpl() interior β never cross a portal. Result: interior invisible in 3rd-person, first-person worked, collisions were present.
The fix (client/vehicle.lua, _StartIplWatcher) uses lib.onCache('vehicle') to start a lightweight passenger watcher that calls LoadInterior() + IsInteriorReady() + RefreshInterior() whenever the vehicle enters a portal-based interior. The thread is event-driven (zero cost when not in a vehicle), uses a token pattern to prevent stale threads, and switches from 750ms β 5000ms sleep after activation. Uses Z+1.0 cascade for reliable portal detection and calls RefreshInterior() to re-activate bob74_ipl interior entity sets.
Access is triple-layer verified: ACE permission β ox_core group β Steam ID fallback.
# server.cfg β grant ACE access
add_principal identifier.steam:YOUR_STEAM_HEX group.admin
add_ace group.admin rde_elevators.admin allow| Command | Description |
|---|---|
/elevator create |
Open creation wizard (name, label, mode) |
/elevator edit [id] |
Edit existing elevator |
/elevator delete [id] |
Delete elevator + all its floors |
/elevator tp [id] [floor] |
Teleport yourself to a floor |
/elevator maintenance [id] |
Toggle maintenance mode |
/elevator list |
List all elevators with IDs |
/elevator reload |
Force-sync all clients |
Floors are created in the admin UI:
- Stand at the physical floor location
- Select "Add Floor" β enter floor name
- Optionally set VIP flag, job restriction, grade
- Save β zone and blip appear instantly server-wide (StateBag sync, no restart)
rde_elevators/
βββ fxmanifest.lua
βββ README.md
βββ CHANGELOG.md
βββ LICENSE
βββ shared/
β βββ config.lua β All config + StateBag keys
β βββ utils.lua β DbBool/BoolDb, RDE_Debug/Info/Error helpers
β βββ permissions.lua β Triple-layer admin check, floor access
βββ server/
β βββ main.lua β Core logic, DB, callbacks, vehicle sync
β βββ statebags.lua β UpdateStatebag(), floor occupancy sync
β βββ analytics.lua β Usage tracking
β βββ commands.lua β Admin commands
βββ client/
β βββ main.lua β StateBag handlers, zone/blip build, menus
β βββ vehicle.lua β Vehicle teleport, passenger sync, IPL fix
β βββ ui.lua β ox_lib context menu rendering
β βββ admin.lua β Admin UI (create/edit/delete)
β βββ effects.lua β Particle effects
β βββ sounds.lua β Audio (ding, door, parking)
β βββ nui.lua β NUI bridge (when Config.UseNUI = true)
βββ locales/
β βββ en.json β English (default)
β βββ de.json β Deutsch
βββ html/
βββ index.html β NUI interface
-- Teleport to a floor programmatically
exports['rde_elevators']:TeleportToFloor(elevator, 'Floor 2', { x=0, y=0, z=10, w=0 })
-- Get current floor state
local floorName, elevatorId = exports['rde_elevators']:GetCurrentFloor()
-- Check cooldown state
local onCD, remainingMs = exports['rde_elevators']:IsOnCooldown()
-- Get all loaded elevators
local elevators = exports['rde_elevators']:GetElevators()
-- Force-rebuild all blips
exports['rde_elevators']:RebuildBlips()
-- Force-rebuild all ox_target zones
exports['rde_elevators']:RebuildTargets()Enable with Config.Debug = true in shared/config.lua, then watch server/client console:
| Log Tag | What it tells you |
|---|---|
[Init] |
Elevator load, callback result, retry logic |
[Sync] |
StateBag delta updates (per-elevator) |
[Targets] |
Zone count after rebuild |
[Teleport] |
Ped teleport coordinates |
[Vehicle] |
Vehicle teleport, occupant report, seat assignments |
[Floor] |
Floor registration, server confirmation |
[IPL] |
Passenger interior context activation (v1.5.1) |
- All sensitive actions validated server-side (teleport coords, floor access, maintenance toggle)
- StateBags for real-time sync β no client polling
- ox_core group checks on all privileged callbacks
- ACE permission support + Steam ID whitelist fallback
- Floor restriction enforcement: server validates job/grade via ox_core player state
- Vehicle class + length validated before teleport β no remote exploit via spoofed class
- Enable
Config.Debug = true - Check server console for
[Init]output β didgetAllreturn 0? - Ensure
oxmysqlis running and therde_elevatorstable exists - If fresh install: restart the resource once after first run (tables auto-create on start)
Fixed in v1.5.0 (#11). Update to the latest release. If you're still seeing this:
- Confirm the IPL is loaded via bob74_ipl on all clients (not just the requester)
- Check client console for
[IPL] Passenger interior context activatedβ if missing, watcher didn't start - Ensure
GetInteriorAtCoords()returns non-zero for your IPL β some IPLs are pure geometry (no portal system), in which case this fix doesn't apply and the interior should be visible anyway
The passenger sync waits up to 3s for the vehicle to arrive at the target position. On high-latency connections this can time out. Increase the deadline in passengerSync in client/vehicle.lua if needed.
- Check
[Targets]debug output β how many zones registered? - Verify
ox_targetis running and loaded beforerde_elevators pcallwraps every zone add β check if ox_target is throwing errors
Check the order in server.cfg. oxmysql must load before rde_elevators. ox_lib and ox_core must also be before.
Maintenance state uses a per-elevator StateBag key. Restart the resource to force a full resync if GlobalState isn't propagating.
Check Config.Blips.Enabled = true and that the elevator's blip.enabled field is not explicitly false. Run /elevator edit [id] and verify blip settings.
ox_core β Player & group management, charId, getGroups()
ox_lib β UI, callbacks, notifications, onCache()
ox_target β Box zones per floor, state-adaptive icons
oxmysql β Async database (auto-create tables, prepared statements)
StateBags β Realtime server β all-clients sync (per-elevator delta)
GTA V Engine β LoadInterior / IsInteriorReady / RefreshInterior (IPL fix)
PRs are always welcome.
- Fork the repository
- Create a branch:
git checkout -b fix/your-fix - Test on a live server before submitting
- Commit:
git commit -m 'fix: description' - Push and open a Pull Request
Guidelines:
- β Keep the RDE header in all files
- β
No
Wait()inside NetEvent handlers β wrap inCreateThread - β
No
PlayerPedId()β usecache.ped - β
DB booleans through
DbBool()/BoolDb()β never raw== 1 - β Test on a live server before PR
- β No telemetry, no paywalls, no ESX/QBCore
- β No
Wait(0)loops unless absolutely necessary and documented
RDE Black Flag Source License v6.66
###################################################################################
# .:: RED DRAGON ELITE (RDE) - BLACK FLAG SOURCE LICENSE v6.66 ::. #
# PROJECT: RDE_ELEVATORS (NEXT-GEN ELEVATOR & GARAGE SYSTEM FOR FIVEM) #
# ARCHITECT: .:: RDE β§ Shin [β³ αα
α±αα
αΎαα αααα
β½] ::. | https://rd-elite.com #
# WARNING: THIS CODE IS PROTECTED BY DIGITAL VOODOO AND PURE HATRED FOR LEAKERS #
# 1. FREE USE β Cost: 0.00β¬. If you paid for this, you got scammed by a rat. #
# 2. TEBEX KILL SWITCH β Sell this = instant DMCA + Nostr public shaming. #
# 3. CREDIT OATH β Keep this header. Don't be a skid. #
# 4. CURSE OF COPY-PASTE β RTFM or you WILL break something. Don't @ me. #
# "We build the future on the graves of paid resources." #
# "REJECT MODERN MEDIOCRITY. EMBRACE RDE SUPERIORITY." #
###################################################################################
TL;DR: β Free forever β Keep the header β Don't sell it β Don't be a skid
| Resource | Description |
|---|---|
| rde_nostr_log | Decentralized FiveM logging via Nostr β replace Discord forever |
| rde_aipd | Next-Gen AI Police & Crime System |
| rde_ipl | IPL management with collision sync |
| awesome-ox-rde | Curated list of the best ox_core resources |
| π Website | rd-elite.com |
| π GitHub | github.com/RedDragonElite |
| π£ Nostr | npub1wr4e24zn6zzjqx8kvnelfvktf0pu6l2gx4gvw06zead2eqyn23sq9tsd94 |
Before opening an issue: Read the README β check Troubleshooting β read CHANGELOG.md β include your console logs. Don't open issues without logs.
Made with π₯ and raw elevator engineering by Red Dragon Elite
The future is ours. We are already inside.
REJECT MODERN MEDIOCRITY. EMBRACE RDE SUPERIORITY.
RDE FOREVER. SYSTEM FAILURE. β‘777β‘