Overview
The prop_o_matic_manager_device customizes the Prop-O-Matic weapon (the tool that lets a player disguise as a prop) and the rules around it. It's the connective tissue of a Prop Hunt game mode: it fires events as players slip into and out of disguises, and it exposes methods to ping (briefly reveal) hidden props so hunters aren't stuck forever.
Reach for this device when you are building a prop hunt round and need Verse logic to react to disguise state — for example, awarding survival points when a prop finishes disguising, dropping ping frequency as the round gets tense, or manually blasting a ping when only a few props remain.
The device does not handle team assignment or elimination itself — pair it with team settings, an elimination manager, and a hiding prop device. What it gives you is the disguise lifecycle (BeginEnteringDisguiseEvent, FinishEnteringDisguiseEvent, ExitingDisguiseEvent), the ping hooks (PingPlayerPropEvent, PingAllPlayerPropsEvent, PingPlayerProps, PingPlayerProp), and the tuning knobs (SetPingProps, SetPingFrequency, SetShowPropsRemaining, SetShowPropPingCooldown, plus the IsPlayerProp query).
API Reference
prop_o_matic_manager_device
Allows customization of the Prop-o-Matic weapon functions and how the game reacts to players using it.
Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse).
prop_o_matic_manager_device<public> := class<concrete><final>(creative_device_base):
Events (subscribe a handler to react):
| Event | Signature | Description |
|---|---|---|
BeginEnteringDisguiseEvent |
BeginEnteringDisguiseEvent<public>:listenable(agent) |
Signaled when an agent begins entering a disguise. Sends the agent that began entering the disguise. |
FinishEnteringDisguiseEvent |
FinishEnteringDisguiseEvent<public>:listenable(agent) |
Signaled when an agent finishes entering a disguise. Sends the agent that finished entering the disguise. |
ExitingDisguiseEvent |
ExitingDisguiseEvent<public>:listenable(agent) |
Signaled when an agent exits a disguise. Sends the agent that exited the disguise. |
PingPlayerPropEvent |
PingPlayerPropEvent<public>:listenable(agent) |
Signaled when a player prop has been pinged. Sends the agent that was pinged. |
PingAllPlayerPropsEvent |
PingAllPlayerPropsEvent<public>:listenable(tuple()) |
Signaled when all player props have been pinged. |
Methods (call these to make the device act):
| Method | Signature | Description |
|---|---|---|
SetPingProps |
SetPingProps<public>(On:logic):void |
Toggle Pinging props on/off. |
SetPingFrequency |
SetPingFrequency<public>(Time:float):void |
Adjust the ping time. |
SetShowPropsRemaining |
SetShowPropsRemaining<public>(On:logic):void |
Toggle showing the props remaining on the UI. |
SetShowPropPingCooldown |
SetShowPropPingCooldown<public>(On:logic):void |
Toggle showing the prop ping cooldown. |
PingPlayerProps |
PingPlayerProps<public>():void |
Manually ping all players that are currently hiding as props. |
PingPlayerProp |
PingPlayerProp<public>(Agent:agent):void |
Manually ping a specific player if they are currently a prop. |
IsPlayerProp |
IsPlayerProp<public>(Agent:agent)<transacts><decides>:void |
Returns whether a player is currently hiding or not. |
Walkthrough
Let's build a mini round manager. When a player finishes entering a disguise we congratulate them; when they exit a disguise (they got spotted or the round ended) we log it. A trigger — think of it as the hunter's "reveal" button on a pedestal — manually pings every hidden prop. We also configure the manager at startup so pings happen on a sensible interval and the HUD shows how many props remain.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/UI }
using { /UnrealEngine.com/Temporary/Diagnostics }
prop_hunt_round := class(creative_device):
@editable
PropManager : prop_o_matic_manager_device = prop_o_matic_manager_device{}
@editable
RevealButton : trigger_device = trigger_device{}
Logger : log = log{Channel := prop_hunt_channel}
OnBegin<override>()<suspends> : void =
# Configure the manager for the round.
PropManager.SetPingProps(true) # allow automatic pinging
PropManager.SetPingFrequency(20.0) # ping hidden props every 20 seconds
PropManager.SetShowPropsRemaining(true) # show "props remaining" on the HUD
PropManager.SetShowPropPingCooldown(true)
# React to the disguise lifecycle.
PropManager.FinishEnteringDisguiseEvent.Subscribe(OnPropDisguised)
PropManager.ExitingDisguiseEvent.Subscribe(OnPropRevealed)
# A hunter pressing the reveal pedestal pings ALL hidden props.
RevealButton.TriggeredEvent.Subscribe(OnRevealPressed)
# React whenever a prop is pinged (auto or manual).
PropManager.PingPlayerPropEvent.Subscribe(OnPropPinged)
OnPropDisguised(Agent : agent) : void =
Logger.Print("A player finished disguising as a prop.")
OnPropRevealed(Agent : agent) : void =
Logger.Print("A player exited their disguise.")
OnRevealPressed(MaybeAgent : ?agent) : void =
# The trigger hands us an optional agent; we don't need it here,
# we just ping every hidden prop on the map.
PropManager.PingPlayerProps()
Logger.Print("Reveal pedestal pressed — pinging all props!")
OnPropPinged(Agent : agent) : void =
Logger.Print("A prop was pinged and briefly revealed.")
prop_hunt_channel := class(log_channel){}
Line by line:
- The two
@editablefields let you drop the placed Prop-O-Matic Manager and a Trigger into the slots in the UEFN Details panel. Without an@editablefield you cannot call a placed device from Verse. - In
OnBegin, the fourSet...calls tune the round:SetPingProps(true)enables pinging at all,SetPingFrequency(20.0)sets the automatic ping cadence (afloat— note the.0), and the twoSetShow...calls turn on HUD hints. FinishEnteringDisguiseEvent.Subscribe(OnPropDisguised)wires the "a player is now fully disguised" moment to our handler. Each disguise event is alistenable(agent), so the handler takes anagentdirectly.RevealButton.TriggeredEvent.Subscribe(OnRevealPressed)gives hunters a physical button that callsPingPlayerProps()— the manual, ping-everyone method.OnRevealPressedreceives?agent(the trigger's optional instigator). We ignore it and just firePingPlayerProps().PingPlayerPropEventfires once per pinged prop, whether that ping came from the timer or from our button — great for scoring or SFX.
Common patterns
Ping one specific player when they stop moving
Use PingPlayerProp(Agent) to reveal a single player — e.g. a hunter's scanner locks onto whoever triggered a volume. We guard with IsPlayerProp so we never try to ping a hunter.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
single_ping_device := class(creative_device):
@editable
PropManager : prop_o_matic_manager_device = prop_o_matic_manager_device{}
@editable
ScannerVolume : trigger_device = trigger_device{}
Logger : log = log{Channel := single_ping_channel}
OnBegin<override>()<suspends> : void =
ScannerVolume.TriggeredEvent.Subscribe(OnScanned)
OnScanned(MaybeAgent : ?agent) : void =
if (Agent := MaybeAgent?):
if (PropManager.IsPlayerProp[Agent]):
PropManager.PingPlayerProp(Agent)
Logger.Print("Scanner locked onto a hidden prop!")
else:
Logger.Print("Scanner found a hunter — ignoring.")
single_ping_channel := class(log_channel){}
Note IsPlayerProp is <decides>, so it's used in a failable context with square brackets: if (PropManager.IsPlayerProp[Agent]):.
React to a player beginning to disguise, and to the all-props ping
BeginEnteringDisguiseEvent fires the instant the disguise animation starts (before it finishes), and PingAllPlayerPropsEvent fires when every hidden prop was pinged at once. The all-props event carries a tuple(), so its handler takes no meaningful payload.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
disguise_watch_device := class(creative_device):
@editable
PropManager : prop_o_matic_manager_device = prop_o_matic_manager_device{}
Logger : log = log{Channel := disguise_watch_channel}
OnBegin<override>()<suspends> : void =
PropManager.BeginEnteringDisguiseEvent.Subscribe(OnBeginDisguise)
PropManager.PingAllPlayerPropsEvent.Subscribe(OnAllPinged)
OnBeginDisguise(Agent : agent) : void =
Logger.Print("A player started slipping into a disguise.")
OnAllPinged() : void =
Logger.Print("Every hidden prop was pinged this cycle!")
disguise_watch_channel := class(log_channel){}
Tighten ping frequency as the round heats up
Call SetPingFrequency again at any time to change the cadence — here we start slow and speed up after a delay, so late-round props get exposed more often.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
pacing_device := class(creative_device):
@editable
PropManager : prop_o_matic_manager_device = prop_o_matic_manager_device{}
Logger : log = log{Channel := pacing_channel}
OnBegin<override>()<suspends> : void =
PropManager.SetPingProps(true)
PropManager.SetPingFrequency(30.0) # relaxed early game
Logger.Print("Round start: slow pings.")
Sleep(120.0) # after two minutes...
PropManager.SetPingFrequency(10.0) # crank up the pressure
Logger.Print("Late game: fast pings!")
pacing_channel := class(log_channel){}
Gotchas
- Floats need a decimal.
SetPingFrequencyandSetTargetSpeed-style methods takefloat. Pass20.0, not20. Verse does not auto-convertinttofloat. IsPlayerPropis failable, not a boolean return. Its signature isIsPlayerProp(Agent:agent)<transacts><decides>:void. Use it in a failable context with brackets:if (PropManager.IsPlayerProp[Agent]):. Do not writeif (PropManager.IsPlayerProp(Agent)):or try to store alogicfrom it.SetPingPropsmust be on for auto-pings. If you callSetPingFrequencybut neverSetPingProps(true), the timer won't fire automatic pings. ManualPingPlayerProps()/PingPlayerProp()still work regardless.- The all-props event carries
tuple(), not an agent.PingAllPlayerPropsEventhandlers take no useful payload — writeOnAllPinged() : void. Only the single-propPingPlayerPropEventgives you theagent. - Trigger instigators are optional.
TriggeredEventhands you?agent; unwrap withif (Agent := MaybeAgent?):before using it. The disguise/ping events, by contrast, arelistenable(agent)and hand you theagentdirectly. - The manager doesn't grant the Prop-O-Matic. You grant the weapon and assign teams via item granters / team settings. This device only customizes behavior and reports state.
- HUD toggles are cosmetic hints.
SetShowPropsRemainingandSetShowPropPingCooldownchange what hunters see; they don't change the underlying ping logic.