The Ultimate Signal Jammer: Building a "Don't Touch That Button" Trap
Tutorial beginner compiles

The Ultimate Signal Jammer: Building a "Don't Touch That Button" Trap

Updated beginner Code verified

The Ultimate Signal Jammer: Building a "Don't Touch That Button" Trap

So, you want to build a trap. Maybe a button that blows up the floor, or a switch that opens a secret loot cave. In UEFN, devices talk to each other all the time. But here's the problem: if you just wire everything together like a tangled mess of Christmas lights, everything happens at once. You press a button, the trap fires, the door opens, AND your music stops. Chaos. Not the fun kind.

To build anything complex, you need a way to control who hears what. Enter the Receiver.

Think of a Receiver as a walkie-talkie set to a specific channel. It's always listening. When it hears a signal on its assigned channel, it reacts. If it doesn't hear anything, it ignores the world. This is how we separate our "trap" logic from our "door" logic. In this tutorial, we're going to build a "Revenge Trap": a button that, when pressed, locks the door behind you and drops a crate of guns in front of you. If you try to run away, the door stays shut.

What You'll Learn

  • Receivers: The devices that listen for signals and react.
  • Channels: The "radio frequencies" that keep different events from crashing into each other.
  • Instigator: The player who started the chain reaction (so the game knows who to lock out).
  • Enable/Disable: Turning devices on and off like light switches.

How It Works

In Fortnite Creative, devices don't have brains. They just have inputs and outputs. A Transmitter (like a Button) shouts into the void. A Receiver stands in the void with a headset.

Here is the golden rule of Receivers: They only care about their specific Channel.

Imagine you have two buttons in your island:

  1. Button A (The Trap Trigger)
  2. Button B (The Reset Switch)

If both buttons shout on "Channel 1," and your Trap Receiver is listening to "Channel 1," pressing either button will trigger the trap. That's bad. We want only Button A to trigger the trap.

So, we set Button A to transmit on Channel 1. We set the Trap Receiver to listen on Channel 1. We set Button B to transmit on Channel 2. The Trap Receiver ignores Channel 2.

It's like having a party. If you're talking about Fortnite, your friends who love Fortnite hear you. Your friends who hate Fortnite (or are in the other room) don't care. Receivers are the friends who only care about specific topics.

The "Instigator" Factor

When a Receiver hears a signal, it needs to know who sent it. This is called the Instigator. Think of the Instigator as the player who last touched the button. If you press the button, you are the Instigator. If a bot presses it, the bot is the Instigator.

Why does this matter? Because we want to lock you out, not the whole server. We use the Instigator info to make sure only the person who triggered the trap gets punished.

Let's Build It

We are building a simple room.

  1. The Trap Button: Triggers the event.
  2. The Door: Locks behind you.
  3. The Loot Box: Spawns for you.

We will use Verse to write the logic. Why Verse? Because in UEFN, you can do this with wires, but Verse gives you precise control over who is doing what and when.

The Verse Script

Copy this code into a Verse script in your UEFN project.

using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

# revenge_trap_manager is a Verse device you place in your UEFN level.
# Wire TrapButton, TrapDoor, and LootSpawner to these properties
# in the UEFN editor Details panel.
revenge_trap_manager := class(creative_device):

    # TrapButton: a button_device placed in the level.
    # Wire it here via the UEFN editor.
    @editable
    TrapButton : button_device = button_device{}

    # TrapDoor: a conditional_button_device used as a gate/door lock.
    # Wire your door-controlling device here.
    # note: Verse has no dedicated "door_device"; use a conditional_button_device
    # or a gate_device to enable/disable passage.
    @editable
    TrapDoor : conditional_button_device = conditional_button_device{}

    # LootSpawner: an item_spawner_device that drops loot when activated.
    @editable
    LootSpawner : item_spawner_device = item_spawner_device{}

    # OnBegin is called automatically when the game session starts.
    OnBegin<override>()<suspends> : void =
        # Subscribe to the button's InteractedWithEvent.
        # This event fires whenever any player presses TrapButton.
        # The event passes the agent (player) who pressed it as the instigator.
        TrapButton.InteractedWithEvent.Subscribe(OnTrapButtonPressed)

    # OnTrapButtonPressed runs every time a player presses TrapButton.
    # Agent is the instigator — the player who pressed the button.
    OnTrapButtonPressed(Agent : agent) : void =
        # 1. Check if the agent is a fort_character so we can act on them.
        if (Player := player[Agent]):
            # 2. Lock the door by disabling the conditional_button_device.
            # Disabling it prevents further interaction, simulating a lock.
            TrapDoor.Disable()

            # 3. Spawn loot at the item_spawner_device.
            LootSpawner.SpawnItem()

            # 4. Print a debug message so we can verify the trap fired.
            # note: player has no SendMessage API in public Verse; use Print for debugging.
            Print("Trap triggered! Door locked and loot spawned.")

Walkthrough: What Just Happened?

  1. creative_device: Every Verse script that controls level logic inherits from creative_device. It's the base class that lets UEFN know this script lives in your island and can hold @editable device references.
  2. @editable: These are the "wire slots" you see in the UEFN Details panel. Drag your placed Button, Door, and Loot Spawner into these slots so the script knows which physical devices to talk to.
  3. OnBegin: This runs once when the game starts. We use it to subscribe to the button's event — telling Verse, "Hey, when this button is pressed, call OnTrapButtonPressed."
  4. InteractedWithEvent.Subscribe: This is the real equivalent of "listening on a channel." Instead of a numeric channel, we subscribe directly to a specific device's event. Only this button triggers this handler.
  5. Agent / player[Agent]: The Agent parameter is the instigator — whoever pressed the button. We cast it to player with player[Agent] so we can use player-specific APIs on them. This is the Verse equivalent of "who did it."
  6. TrapDoor.Disable(): Disabling the conditional_button_device blocks further interaction, simulating a lock. When you want to unlock, call TrapDoor.Enable().
  7. LootSpawner.SpawnItem(): Tells the item_spawner_device to drop its configured item at its location in the level.

How to Set It Up in UEFN

  1. Place a Button device in your level. No channel wiring needed — Verse subscribes directly to its event.
  2. Place a conditional_button_device where your door is. This acts as your lock gate.
  3. Place an item_spawner_device where you want loot to appear. Configure which item it spawns in its Details panel.
  4. Place the revenge_trap_manager Verse device anywhere in your level.
  5. In the Details panel of revenge_trap_manager, drag your Button into TrapButton, your door device into TrapDoor, and your loot spawner into LootSpawner.
  6. Test it. Press the button. The door should lock, and the loot should appear.

Try It Yourself

You've built a basic trap. Now, make it worse.

Challenge: Add a "Reset" button.

  • Place a second button device in the level.
  • Add a second @editable property called ResetButton : button_device to the script.
  • In OnBegin, subscribe ResetButton.InteractedWithEvent to a new handler called OnResetButtonPressed.
  • In OnResetButtonPressed, call TrapDoor.Enable() to unlock the door and LootSpawner.SpawnItem() to replenish the loot.

Hint: You'll need a second event handler function. Check for the reset condition there instead of inside OnTrapButtonPressed.

Recap

  • Receivers are devices that listen for signals on specific Channels.
  • Channels keep your events separate. Button A on Channel 1 doesn't mess with Button B on Channel 2.
  • Instigator is the player who triggered the signal. Use this to target specific players for traps or rewards.
  • Verse lets you write the logic that connects the Receiver to the Door and Loot devices.

Now go build something chaotic. Just make sure you have a reset button.

References

  • https://dev.epicgames.com/documentation/en-us/fortnite-creative/using-player-reference-devices-in-fortnite-creative
  • https://dev.epicgames.com/documentation/en-us/fortnite/using-player-reference-devices-in-fortnite-creative
  • https://dev.epicgames.com/documentation/en-us/fortnite-creative/using-radio-devices-in-fortnite-creative
  • https://dev.epicgames.com/documentation/en-us/fortnite-creative/using-heavy-turret-devices-in-fortnite-creative
  • https://dev.epicgames.com/documentation/en-us/fortnite-creative/using-siege-cannon-devices-in-fortnite-creative

Verse source files

Turn this into a guided course

Add Receivers to your free study plan — we'll suggest related pages and stitch the lot into one compile-checked, self-guided lesson with worked examples and quizzes.

Original tutorial generated by Verse Island from the Verse/UEFN knowledge base, with references to the Epic Games sources above. Code is validated against the knowledge base.

Comments

    Sign in to vote, comment, or suggest an edit. Sign in