Reference Devices

vehicle_spawner_valet_suv_device: A Valet That Parks Your SUV on Cue

The Valet SUV Spawner drops a rugged four-door SUV onto your island — perfect for getaway missions, racing checkpoints, or a literal valet booth where stepping on a plate hands you the keys. This article shows the device's real Verse API: spawning, respawning, assigning a driver, destroying the vehicle, and reacting to enter/exit and spawn/destroy events.

Updated
The code on this reference page is provided as-is and did not pass the latest compile check — treat the examples as a starting point and verify in your project.
Watch the Knotvehicle_spawner_valet_suv_device in ~90 seconds.

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/Disable the spawner, RespawnVehicle, DestroyVehicle, and AssignDriver(Agent).
  • Events for when an agent enters or exits (AgentEntersVehicleEvent, AgentExitsVehicleEvent), when a vehicle spawns (SpawnedEvent, which hands you the fort_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_device that 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_device is the @editable field — UEFN lets you point it at the placed valet spawner. Without this field you cannot call any of its methods.
  • In OnBegin, we Subscribe handlers to the trigger and the spawner's events. Each subscription names a method of this class as the handler.
  • OnValetCalled receives (Agent : ?agent) because TriggeredEvent is a listenable(?agent). We unwrap with if (Summoner := Agent?):, stash the summoner in PendingDriver, then call RespawnVehicle() — which guarantees a brand-new SUV.
  • OnSUVSpawned(Vehicle : fort_vehicle) fires from SpawnedEvent, which sends the real fort_vehicle. We then call AssignDriver(Driver) to teleport our summoner into the seat.
  • OnExited calls DestroyVehicle() 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 @editable field. Calling vehicle_spawner_valet_suv_device{}.RespawnVehicle() on a throwaway value does nothing useful — wire the field to your placed spawner in the Details panel.
  • SpawnedEvent sends a fort_vehicle; DestroyedEvent sends tuple(). Match your handler signature: OnSUVSpawned(Vehicle : fort_vehicle) vs OnSUVDestroyed(). A mismatch is a compile error.
  • Prefer SpawnedEvent/DestroyedEvent over the deprecated VehicleSpawnedEvent/VehicleDestroyedEvent. The deprecated ones still compile but give you no fort_vehicle payload.
  • Trigger events hand you ?agent, vehicle enter/exit events hand you agent. Unwrap ?agent with if (A := Agent?): before using it; the agent variants are already concrete.
  • RespawnVehicle destroys the old car first. If you only want to remove a car without replacing it, call DestroyVehicle instead.
  • AssignDriver only works when a vehicle currently exists. Call it after a spawn (e.g. inside SpawnedEvent), not before RespawnVehicle has had a chance to place the car.
  • Disable stops the device from spawning but doesn't remove an existing car. Pair it with DestroyVehicle if you need a clean lot.

Build your own lesson with vehicle_spawner_valet_suv_device

Generate a personalized, step-by-step lesson plan built around this object — grounded in this exact reference and our compile-verified knowledge base.

Build a lesson →