Docs / Signal

Signal

Roblox signal helpers + a pure C++ userland Signal.new().

Library#10 of 23 Functions16

Roblox signals

firesignal(signal: RBXScriptSignal, ...args)
Invoke every Connect/Once handler and resume every Wait — including cross-VM handlers registered from actors. Deep-marshals table args and preserves Instance identity.
lua
firesignal(workspace.Part.Touched, workspace.OtherPart)
defersignal(signal: RBXScriptSignal, ...args)
Same as firesignal but dispatches via task.defer.
lua
defersignal(game.Players.PlayerAdded, game.Players.LocalPlayer)
replicatesignal(signal: RBXScriptSignal, ...args)
Fire a signal AND replicate it to the server (for allowlisted events like OnServerEvent).
lua
local remote = game.ReplicatedStorage.RemoteEvent
replicatesignal(remote.OnServerEvent, game.Players.LocalPlayer, "hello")
cansignalreplicate(signal: RBXScriptSignal) → boolean
Whether replicatesignal is allowed on this event.
lua
if cansignalreplicate(remote.OnServerEvent) then
    replicatesignal(remote.OnServerEvent, ...)
end
getconnections(signal: RBXScriptSignal) → {Connection}
All connections on the signal — each exposes Function, Thread, Enabled, ForeignState, plus Fire, Defer, Disconnect, Disable, Enable.
lua
for _, c in ipairs(getconnections(workspace.ChildAdded)) do
    c:Disable()   -- pause every listener
end
fireclickdetector(clickDetector: ClickDetector, distance: number?)
Simulate a click at the given distance.
lua
fireclickdetector(workspace.Button.ClickDetector, 5)
fireproximityprompt(prompt: ProximityPrompt)
Trigger a proximity prompt as if the local player held it.
lua
fireproximityprompt(workspace.Door.ProximityPrompt)
getsignalarguments(signal: RBXScriptSignal) → {string}
Type names of each argument the signal fires with.
lua
print(table.concat(getsignalarguments(workspace.Part.Touched), ", "))
getsignalargumentsinfo(signal: RBXScriptSignal) → {{Name:string, Type:string}}
Full argument info — name and type per parameter.
lua
for _, info in ipairs(getsignalargumentsinfo(workspace.Part.Touched)) do
    print(info.Name, info.Type)
end
getsignalwhitelist() → {{Event:string, Parent:string}}
Events on which replicatesignal is permitted.
lua
for _, entry in ipairs(getsignalwhitelist()) do
    print(entry.Parent .. "." .. entry.Event)
end

Userland (Signal.new)

Signal.new() → Signal new
Creates a fresh userland signal object.
lua
local sig = Signal.new()
sig:Connect(handler: function) → Connection
Register a handler. Returns a Connection with :Disconnect().
lua
local conn = sig:Connect(function(x) print("got", x) end)
sig:Once(handler: function) → Connection
Register a one-shot handler — auto-disconnects after the first Fire.
lua
sig:Once(function() print("fired once") end)
sig:Wait() → ... yields
Yield until the next Fire; returns its args.
lua
local x = sig:Wait()
print("received", x)
sig:Fire(...args)
Dispatch to every connected handler (via task.spawn) and resume every waiting thread.
lua
sig:Fire("hello", 42)
conn:Disconnect()
Release the callback ref and unlink from the parent signal.
lua
conn:Disconnect()
lua
local sig = Signal.new()
local conn = sig:Connect(function(x) print("got", x) end)
sig:Fire("hello")   --> got hello
conn:Disconnect()