Elevator script
🚪 Vespucci Elevators System
Overview
The Vespucci Elevator System (cfx_gn_vespucci_elevator_script) allows players to use elevators seamlessly without teleportation.
The system automatically configures itself on startup and integrates perfectly with interaction frameworks.
⚙️ Setup
Start the resource:
ensure cfx_gn_vespucci_elevator_scriptThat’s it — everything is configured automatically. If you prefer teleportation-based elevators, simply do not start this resource.
🧭 Teleportation vs. Physical Elevators
Non-Teleportation (default)
Elevators move physically without teleporting the player.
Start the cfx_gn_vespucci_elevator_script resource.
Teleportation
The classic mode where players are instantly teleported between floors.
Do not start the resource; manage entitysets manually.
How to enable static elevator?
In `cfx_gn_vespucci_pd`, you can enable the entities missing in the `Config.lua` by setting true to Config.StaticElevators.
🧩 Interaction Integration Example
You can register your own interactions with elevators by using the built-in exports from gn_elevator.
function LoadVespucciInteractions()
if GetResourceState("cfx_gn_vespucci_elevator_script") ~= "started" then return end
local gnElevator = exports.cfx_gn_vespucci_elevator_script
local elevators = gnElevator:GetElevatorConfigs()
for elevatorId, elevator in pairs(elevators) do
-- Register each floor panel
for id, floorCfg in pairs(elevator.floors) do
RegisterInteractionSpot("elev_panel_" .. elevatorId .. "_" .. id, floorCfg.panel + vec3(0, 0, 1.25), {
point = { text = "call", distance = 5.0 },
canLoad = function()
return gnElevator:GetElevatorCurrentFloor(elevatorId) ~= id and not gnElevator:IsInAnyElevator()
end,
onInteract = function()
gnElevator:CallElevator()
end
})
end
-- Register lift interaction
RegisterInteractionModel(elevator.model, {
point = { text = "use", distance = 5.0 },
offset = elevator.insidePanelOffset,
skipVisionCheck = true,
skipRoomCheck = true,
canLoad = function()
return gnElevator:IsInAnyElevator()
end,
onInteract = function()
gnElevator:OpenElevatorKeypad()
end
})
end
end🔐 Access Control
You can restrict or allow access to be call from specific floors per player.
CanPlayerAccessFloor(elevatorId, floorIndex)
Returns whether a player has permission to go to the specified floor.
SetPlayerAccessFloor(elevatorId, floorIndex, canAccess)
Grants or removes access to a floor for the current player.
📦 Exported Functions
Below is the complete list of available exports for integration with other scripts.
OpenElevatorKeypad()
none
–
Opens the keypad UI inside an elevator.
CallElevator()
none
–
Calls the elevator to the current floor.
GetElevatorCurrentFloor(elevatorId)
string elevatorId
number floorIndex
Gets the current floor of a specific elevator.
IsInElevator(elevatorId)
string elevatorId
boolean
Returns whether the player is currently in a given elevator.
IsInAnyElevator()
none
boolean
Returns true if the player is in any elevator.
SetElevatorInteractionEnabled(enabled)
boolean enabled
–
Enables or disables all elevator interaction.
🧠 Notes
The system dynamically links to the main
cfx_gn_vespucci_elevator_scriptresource.Each elevator’s floor and model information is automatically discovered.
Interactions can be safely added or removed at runtime.
Access control allows complex logic (e.g. jobs, keycards, staff, etc.).
Last updated
