Overview
The vehicle_spawner_valet_suv_device is a specialized vehicle_spawner_device that spawns a valet SUV — a sturdy four-seat car. Reach for it whenever your mode needs a drivable SUV that you want to control from code: a heist where stepping on a plate spawns the getaway car and assigns you as driver, a delivery quest where leaving the car triggers the next objective, or a destruction derby that respawns wrecks automatically.
Because it inherits everything from vehicle_spawner_device, the valet spawner exposes the same toolkit:
- Methods to
Enable/Disablethe spawner,RespawnVehicle,DestroyVehicle, andAssignDriver(Agent). - Events for when an agent enters or exits (
AgentEntersVehicleEvent,AgentExitsVehicleEvent), when a vehicle spawns (SpawnedEvent, which hands you thefort_vehicle), and when one is destroyed (DestroyedEvent).
The key beginner gotcha: the device must be declared as an @editable field on a creative_device class and wired in the UEFN Details panel. You can't call its methods on a bare reference.
API Reference
vehicle_spawner_valet_suv_device
Specialized
vehicle_spawner_devicethat allows a valet SUV to be configured and spawned.
Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse). Inherited members are merged from vehicle_spawner_device.
vehicle_spawner_valet_suv_device<public> := class<concrete><final>(vehicle_spawner_device):
Events (subscribe a handler to react):
| Event | Signature | Description |
|---|---|---|
AgentEntersVehicleEvent |
AgentEntersVehicleEvent<public>:listenable(agent) |
Signaled when an agent enters the vehicle. Sends the agent that entered the vehicle. |
AgentExitsVehicleEvent |
AgentExitsVehicleEvent<public>:listenable(agent) |
Signaled when an agent exits the vehicle. Sends the agent that exited the vehicle. |
SpawnedEvent |
SpawnedEvent<public>:listenable(fort_vehicle) |
Signaled when a vehicle is spawned or respawned by this device. Sends the fort_vehicle who was spawned. |
VehicleSpawnedEvent |
VehicleSpawnedEvent<public>:listenable(tuple()) |
Signaled when a vehicle is spawned or respawned by this device. Deprecated, use SpawnedEvent instead. |
VehicleDestroyedEvent |
VehicleDestroyedEvent<public>:listenable(tuple()) |
Signaled when a vehicle is destroyed. Deprecated, use DestroyedEvent instead. |
DestroyedEvent |
DestroyedEvent<public>:listenable(tuple()) |
Signaled when a vehicle is destroyed. |
Methods (call these to make the device act):
| Method | Signature | Description |
|---|---|---|
Enable |
Enable<public>():void |
Enables this device. |
Disable |
Disable<public>():void |
Disables this device. |
AssignDriver |
AssignDriver<public>(Agent:agent):void |
Sets agent as the vehicle's driver. |
DestroyVehicle |
DestroyVehicle<public>():void |
Destroys the vehicle if it exists. |
RespawnVehicle |
RespawnVehicle<public>():void |
Spawns a new vehicle. The previous vehicle will be destroyed before a new vehicle spawns. |
vehicle_spawner_device
Base class for various specialized vehicle spawners which allow specific vehicle types to be spawned and configured with specialized options.
Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse).
vehicle_spawner_device<public> := class<abstract><epic_internal>(creative_device_base):
Events (subscribe a handler to react):
| Event | Signature | Description |
|---|---|---|
AgentEntersVehicleEvent |
AgentEntersVehicleEvent<public>:listenable(agent) |
Signaled when an agent enters the vehicle. Sends the agent that entered the vehicle. |
AgentExitsVehicleEvent |
AgentExitsVehicleEvent<public>:listenable(agent) |
Signaled when an agent exits the vehicle. Sends the agent that exited the vehicle. |
SpawnedEvent |
SpawnedEvent<public>:listenable(fort_vehicle) |
Signaled when a vehicle is spawned or respawned by this device. Sends the fort_vehicle who was spawned. |
VehicleSpawnedEvent |
VehicleSpawnedEvent<public>:listenable(tuple()) |
Signaled when a vehicle is spawned or respawned by this device. Deprecated, use SpawnedEvent instead. |
VehicleDestroyedEvent |
VehicleDestroyedEvent<public>:listenable(tuple()) |
Signaled when a vehicle is destroyed. Deprecated, use DestroyedEvent instead. |
DestroyedEvent |
DestroyedEvent<public>:listenable(tuple()) |
Signaled when a vehicle is destroyed. |
Methods (call these to make the device act):
| Method | Signature | Description |
|---|---|---|
Enable |
Enable<public>():void |
Enables this device. |
Disable |
Disable<public>():void |
Disables this device. |
AssignDriver |
AssignDriver<public>(Agent:agent):void |
Sets agent as the vehicle's driver. |
DestroyVehicle |
DestroyVehicle<public>():void |
Destroys the vehicle if it exists. |
RespawnVehicle |
RespawnVehicle<public>():void |
Spawns a new vehicle. The previous vehicle will be destroyed before a new vehicle spawns. |
Walkthrough
Let's build a valet booth. A player steps on a trigger plate; the booth spawns a fresh SUV and assigns that player as its driver. When the player exits the SUV, we destroy it (the valet "takes it away"). We also log spawn and destroy events through a HUD message device so you can see the lifecycle.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# Valet booth: step on the plate -> spawn an SUV and hop in.
valet_booth_device := class(creative_device):
# Wire these to placed devices in the Details panel.
@editable
SUVSpawner : vehicle_spawner_valet_suv_device = vehicle_spawner_valet_suv_device{}
@editable
CallTrigger : trigger_device = trigger_device{}
# Remember who summoned the SUV so we know who to assign as driver.
var PendingDriver : ?agent = false
OnBegin<override>()<suspends>:void =
# React to the player stepping on the valet plate.
CallTrigger.TriggeredEvent.Subscribe(OnValetCalled)
# React to the SUV lifecycle.
SUVSpawner.SpawnedEvent.Subscribe(OnSUVSpawned)
SUVSpawner.AgentEntersVehicleEvent.Subscribe(OnEntered)
SUVSpawner.AgentExitsVehicleEvent.Subscribe(OnExited)
SUVSpawner.DestroyedEvent.Subscribe(OnSUVDestroyed)
# The trigger hands us (Agent : ?agent) — unwrap it before use.
OnValetCalled(Agent : ?agent) : void =
if (Summoner := Agent?):
set PendingDriver = option{Summoner}
# RespawnVehicle destroys any old SUV then spawns a fresh one.
SUVSpawner.RespawnVehicle()
# SpawnedEvent gives us the actual fort_vehicle that appeared.
OnSUVSpawned(Vehicle : fort_vehicle) : void =
Print("Valet SUV is ready!")
# If someone summoned it, put them behind the wheel.
if (Driver := PendingDriver?):
SUVSpawner.AssignDriver(Driver)
set PendingDriver = false
OnEntered(Agent : agent) : void =
Print("A driver got in the SUV.")
# When the driver exits, the valet "takes the car away".
OnExited(Agent : agent) : void =
Print("Driver left — valet is parking the SUV.")
SUVSpawner.DestroyVehicle()
OnSUVDestroyed() : void =
Print("SUV removed from the lot.")
Line by line:
SUVSpawner : vehicle_spawner_valet_suv_deviceis the@editablefield — UEFN lets you point it at the placed valet spawner. Without this field you cannot call any of its methods.- In
OnBegin, weSubscribehandlers to the trigger and the spawner's events. Each subscription names a method of this class as the handler. OnValetCalledreceives(Agent : ?agent)becauseTriggeredEventis alistenable(?agent). We unwrap withif (Summoner := Agent?):, stash the summoner inPendingDriver, then callRespawnVehicle()— which guarantees a brand-new SUV.OnSUVSpawned(Vehicle : fort_vehicle)fires fromSpawnedEvent, which sends the realfort_vehicle. We then callAssignDriver(Driver)to teleport our summoner into the seat.OnExitedcallsDestroyVehicle()so the SUV disappears once the player walks away — completing the valet illusion.
Common patterns
Toggle the spawner on/off with a switch
Use Enable/Disable so the valet booth only operates during a shop phase.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
valet_phase_device := class(creative_device):
@editable
SUVSpawner : vehicle_spawner_valet_suv_device = vehicle_spawner_valet_suv_device{}
@editable
OpenButton : button_device = button_device{}
@editable
CloseButton : button_device = button_device{}
OnBegin<override>()<suspends>:void =
OpenButton.InteractedWithEvent.Subscribe(OnOpen)
CloseButton.InteractedWithEvent.Subscribe(OnClose)
# Start closed.
SUVSpawner.Disable()
OnOpen(Agent : agent) : void =
SUVSpawner.Enable()
OnClose(Agent : agent) : void =
SUVSpawner.Disable()
# Clear out any car left on the lot.
SUVSpawner.DestroyVehicle()
Auto-respawn wrecks for a demolition arena
When the SUV is destroyed, immediately bring a fresh one. DestroyedEvent carries no payload, so the handler takes ().
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
derby_refill_device := class(creative_device):
@editable
SUVSpawner : vehicle_spawner_valet_suv_device = vehicle_spawner_valet_suv_device{}
OnBegin<override>()<suspends>:void =
SUVSpawner.DestroyedEvent.Subscribe(OnWrecked)
# Spawn the first car at match start.
SUVSpawner.RespawnVehicle()
OnWrecked() : void =
# A wreck disappeared — roll out a replacement.
SUVSpawner.RespawnVehicle()
Hand the keys to whoever steps in
Use AgentEntersVehicleEvent to react to a real boarding event and confirm the driver.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
keys_on_entry_device := class(creative_device):
@editable
SUVSpawner : vehicle_spawner_valet_suv_device = vehicle_spawner_valet_suv_device{}
OnBegin<override>()<suspends>:void =
SUVSpawner.AgentEntersVehicleEvent.Subscribe(OnBoarded)
# AgentEntersVehicleEvent sends a plain agent (already unwrapped).
OnBoarded(Agent : agent) : void =
Print("Player boarded — locking them in as driver.")
SUVSpawner.AssignDriver(Agent)
Gotchas
- You must declare the device as an
@editablefield. Callingvehicle_spawner_valet_suv_device{}.RespawnVehicle()on a throwaway value does nothing useful — wire the field to your placed spawner in the Details panel. SpawnedEventsends afort_vehicle;DestroyedEventsendstuple(). Match your handler signature:OnSUVSpawned(Vehicle : fort_vehicle)vsOnSUVDestroyed(). A mismatch is a compile error.- Prefer
SpawnedEvent/DestroyedEventover the deprecatedVehicleSpawnedEvent/VehicleDestroyedEvent. The deprecated ones still compile but give you nofort_vehiclepayload. - Trigger events hand you
?agent, vehicle enter/exit events hand youagent. Unwrap?agentwithif (A := Agent?):before using it; theagentvariants are already concrete. RespawnVehicledestroys the old car first. If you only want to remove a car without replacing it, callDestroyVehicleinstead.AssignDriveronly works when a vehicle currently exists. Call it after a spawn (e.g. insideSpawnedEvent), not beforeRespawnVehiclehas had a chance to place the car.Disablestops the device from spawning but doesn't remove an existing car. Pair it withDestroyVehicleif you need a clean lot.