elimination_manager_device: Reacting to Player Eliminations
Every battle-royale, arena, or objective mode needs to know the instant one player takes another down. The elimination_manager_device fires clean events for the eliminated player, the eliminator, and even for whoever picks up any item it spawns on a kill. This article shows you how to wire those events into real game logic — score bonuses, kill streaks, and drop pickups.
elimination_manager_device in ~90 seconds.Overview
The elimination_manager_device is your hook into Fortnite's combat outcome pipeline. It extends base_item_spawner_device, so on top of reporting eliminations it can also spawn an item (a weapon, a bandage, a shield potion) at a target location when a qualifying elimination happens.
Reach for it when you want to:
- Give the eliminator a reward — bonus score, a kill-streak buff, a new weapon.
- React to the eliminated player — respawn logic, drop their loot, play a taunt.
- Detect when someone picks up the item the manager dropped on a kill.
- Turn elimination tracking on and off per round or per phase with
Enable/Disable.
It exposes three events — EliminatedEvent, EliminationEvent, and ItemPickedUpEvent — plus the Enable and Disable methods. The important subtlety: EliminatedEvent hands you the victim as a plain agent, while EliminationEvent hands you the eliminator as an optional ?agent (because environmental deaths have no agent behind them).
API Reference
elimination_manager_device
Used to spawn items when an
agentor specified target is eliminated.
Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse). Inherited members are merged from base_item_spawner_device.
elimination_manager_device<public> := class<concrete><final>(base_item_spawner_device):
Events (subscribe a handler to react):
| Event | Signature | Description |
|---|---|---|
EliminatedEvent |
EliminatedEvent<public>:listenable(agent) |
Signaled when a qualifying elimination occurs. Sends the eliminated agent. |
EliminationEvent |
EliminationEvent<public>:listenable(?agent) |
Signaled when a qualifying elimination occurs. Sends the eliminator agent. If the eliminator is a non-agent then false is returned. |
ItemPickedUpEvent |
ItemPickedUpEvent<public>:listenable(agent) |
Signaled when an agent picks up the spawned item. Sends the agent that picked up the item. |
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. |
Walkthrough
Let's build a Kill Streak Arena. When a player eliminates someone, we grant them bonus score (via a placed score manager) and, on every third player's item pickup, we log a supply-drop notice. We also enable the manager only when the round starts so eliminations before the fight don't count.
Drop an Elimination Manager and a Score Manager device into the level, then bind both in Verse.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# A kill-streak arena driven by the elimination_manager_device.
kill_streak_arena := class(creative_device):
# Bind these in the Details panel of the device.
@editable
ElimManager : elimination_manager_device = elimination_manager_device{}
@editable
BonusScore : score_manager_device = score_manager_device{}
# Localized text helper — message params never take raw strings.
ArenaText<localizes>(S : string) : message = "{S}"
OnBegin<override>()<suspends> : void =
# Start with tracking off; we switch it on when the fight begins.
ElimManager.Disable()
# React to who did the eliminating.
ElimManager.EliminationEvent.Subscribe(OnElimination)
# React to who got eliminated.
ElimManager.EliminatedEvent.Subscribe(OnEliminated)
# React to item pickups from the drops it spawns.
ElimManager.ItemPickedUpEvent.Subscribe(OnItemPickedUp)
# Open the arena for business.
ElimManager.Enable()
Print(ArenaText("Kill Streak Arena is live!"))
# EliminationEvent gives the ELIMINATOR as an OPTIONAL agent.
OnElimination(MaybeAgent : ?agent) : void =
if (Eliminator := MaybeAgent?):
# A real player got the kill — reward them.
BonusScore.Activate(Eliminator)
Print(ArenaText("Eliminator rewarded with bonus score!"))
else:
# No agent = environmental / non-player elimination.
Print(ArenaText("Environmental elimination — no reward."))
# EliminatedEvent gives the VICTIM as a plain agent (no unwrap needed).
OnEliminated(Victim : agent) : void =
Print(ArenaText("A player was eliminated."))
# Fires when someone walks over a spawned drop.
OnItemPickedUp(Picker : agent) : void =
Print(ArenaText("Someone grabbed the drop!"))
Line by line:
@editable ElimManager : elimination_manager_device = elimination_manager_device{}— declares the device field so Verse can talk to the placed device. Without this@editablebinding you'd get an Unknown identifier error trying to call its methods.ElimManager.Disable()inOnBegin— the device ships enabled; disabling first lets you gate exactly when eliminations start counting..EliminationEvent.Subscribe(OnElimination)— subscribes a method at class scope. Because this event islistenable(?agent), the handler's parameter is?agent.if (Eliminator := MaybeAgent?)— unwraps the optional. If it fails, the elimination came from the environment (fall damage, storm) and there's no agent to reward.BonusScore.Activate(Eliminator)— awards score to the eliminator via the placed score manager.OnEliminated(Victim : agent)—EliminatedEventislistenable(agent), so the victim arrives already unwrapped.ElimManager.Enable()— turns tracking on. From here every qualifying kill fires the events.
Common patterns
Reward only the eliminator, ignore environment kills
Use EliminationEvent and bail early when the optional agent is empty.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
eliminator_rewarder := class(creative_device):
@editable
ElimManager : elimination_manager_device = elimination_manager_device{}
@editable
WeaponGranter : item_granter_device = item_granter_device{}
OnBegin<override>()<suspends> : void =
ElimManager.Enable()
ElimManager.EliminationEvent.Subscribe(OnKill)
OnKill(MaybeAgent : ?agent) : void =
# Only real players earn the upgrade weapon.
if (Eliminator := MaybeAgent?):
WeaponGranter.GrantItem(Eliminator)
Drop-and-collect: react to the spawned item
Because the manager extends the item spawner, someone can pick up what it drops. ItemPickedUpEvent tells you who.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
loot_tracker := class(creative_device):
@editable
ElimManager : elimination_manager_device = elimination_manager_device{}
@editable
HealthGranter : item_granter_device = item_granter_device{}
OnBegin<override>()<suspends> : void =
ElimManager.Enable()
ElimManager.ItemPickedUpEvent.Subscribe(OnPickup)
OnPickup(Picker : agent) : void =
# Whoever loots the kill-drop also gets a heal item.
HealthGranter.GrantItem(Picker)
Phase gating with Enable / Disable
Toggle whether eliminations count. Wire a button to open a "combat phase" and close it again.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
phase_gate := class(creative_device):
@editable
ElimManager : elimination_manager_device = elimination_manager_device{}
@editable
StartButton : button_device = button_device{}
@editable
EndButton : button_device = button_device{}
OnBegin<override>()<suspends> : void =
# Eliminations don't count until combat phase opens.
ElimManager.Disable()
StartButton.InteractedWithEvent.Subscribe(OnStart)
EndButton.InteractedWithEvent.Subscribe(OnEnd)
OnStart(Agent : agent) : void =
ElimManager.Enable()
OnEnd(Agent : agent) : void =
ElimManager.Disable()
Gotchas
EliminationEventis?agent,EliminatedEventisagent. The eliminator can be missing (fall/storm/environment), so you must unwrap withif (A := MaybeAgent?):. The victim always exists, so its handler takes a plainagent. Mixing these up is the #1 compile error here.- You must bind the device as an
@editablefield. Callingelimination_manager_device{}.Enable()on a fresh literal does nothing — it isn't the placed device. Declare an@editablefield and drag the real device onto it in the Details panel. - Handlers are methods, subscribed in
OnBegin. DefineOnElimination,OnEliminated, etc. at class scope (4-space indent) and call.Subscribe(...)insideOnBegin(8-space indent). Printneeds localized text.Printtakes amessage. Build one with a<localizes>helper likeArenaText<localizes>(S:string):message = "{S}"and passArenaText("...")— there is noStringToMessage.- The device may already be enabled. If you want precise control over when kills count, call
Disable()at the top ofOnBeginandEnable()only when your phase actually starts. - Item spawning is optional but the pickup event only fires if an item is configured.
ItemPickedUpEventnever signals unless the manager is set to spawn something on elimination in its device options.
Guides & scripts that use elimination_manager_device
- QUESTS API in Fortnite Creative/UEFN! (Experimental Tutorial)This tutorial demonstrates how to build a complete Quest Management system using Fortnite's experimental Verse Quests API. The creator walks through importing assets, defining custom quest classes inheriting from basic_q…
- 1v1 Build Fights in UEFN: Build the Skill-Duel ModeTwo players, one arena, build and box until someone wins - Fortnite distilled to pure mechanical skill, no RNG, head to head. We break down the skill-duel loop, point to the legendary practice arenas (Pandvil, GoBige), t…
- Party / Mini-game Hub in UEFN: Build the Fall-Guys-Style GauntletA big lobby runs a gauntlet of short, silly mini-games, and the herd is thinned each round until a champion remains - the chaotic-fun format Fall Guys made a phenomenon. We break down the round-elimination loop, point to…
- Gun Game in UEFN: Climb the ArsenalEvery elimination promotes you to the next gun; first to win with the last weapon takes it. Gun Game forces you to master the whole arsenal. We break down the progression loop, who built the popular ones (JesGran's Nuket…
- Red vs Blue in UEFN: Endless Team WarfarePick a side, infinite ammo, fight forever — Red vs Blue is Creative's zero-friction team-deathmatch staple. We break down the nonstop-action loop, who built the popular ones (Typical Gamer's SUPER RED VS BLUE), then buil…
- Zone Wars in UEFN: Train the End-GameThe shrinking storm, full mats, last one standing — Zone Wars is the end-game trainer competitive players grind. We break down why it's all killer no filler, who built the great ones (theboydilly, nebzzzy), then build a …
Build your own lesson with elimination_manager_device
Generate a personalized, compile-checked lesson grounded in this exact reference.
Build a lesson →