The Ultimate Signal Jammer: Building a "Don't Touch That Button" Trap
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:
- Button A (The Trap Trigger)
- 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.
- The Trap Button: Triggers the event.
- The Door: Locks behind you.
- 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?
creative_device: Every Verse script that controls level logic inherits fromcreative_device. It's the base class that lets UEFN know this script lives in your island and can hold@editabledevice references.@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.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, callOnTrapButtonPressed."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.Agent/player[Agent]: TheAgentparameter is the instigator — whoever pressed the button. We cast it toplayerwithplayer[Agent]so we can use player-specific APIs on them. This is the Verse equivalent of "who did it."TrapDoor.Disable(): Disabling theconditional_button_deviceblocks further interaction, simulating a lock. When you want to unlock, callTrapDoor.Enable().LootSpawner.SpawnItem(): Tells theitem_spawner_deviceto drop its configured item at its location in the level.
How to Set It Up in UEFN
- Place a Button device in your level. No channel wiring needed — Verse subscribes directly to its event.
- Place a
conditional_button_devicewhere your door is. This acts as your lock gate. - Place an
item_spawner_devicewhere you want loot to appear. Configure which item it spawns in its Details panel. - Place the
revenge_trap_managerVerse device anywhere in your level. - In the Details panel of
revenge_trap_manager, drag your Button intoTrapButton, your door device intoTrapDoor, and your loot spawner intoLootSpawner. - 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
@editableproperty calledResetButton : button_deviceto the script. - In
OnBegin, subscribeResetButton.InteractedWithEventto a new handler calledOnResetButtonPressed. - In
OnResetButtonPressed, callTrapDoor.Enable()to unlock the door andLootSpawner.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
- 01-device.verse · device
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.
References
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.