Skip to content

Controlling Sirens

Working with sirens is a more complicated topic with EVH. You can read the status of sirens on the client and server, but changing sirens is a client-side only operation.

Reading the current siren state#

Unlike functions, sirens are not stored as attributes on the vehicle. Instead, you must use the sound properties to get the current siren state.

Here's a code snippet showing how to get the current siren state of a vehicle:

-- Client or server-side script
local siren = ... -- reference to the siren sound object

local isSirenOn = siren.IsPlaying
print("Is siren on: ", isSirenOn)

To do something whenever the siren state changes, you can use the GetPropertyChangedSignal function like so:

-- Assuming same context as above
siren:GetPropertyChangedSignal("IsPlaying"):Connect(function()
    local isSirenOn = siren.IsPlaying
    print("Siren state changed. Is siren on: ", isSirenOn)
end)

Setting the siren state#

As mentioned earlier, changing the siren state is a client-side only operation. This must be done via the RemoteEvent.

Here's a code snippet showing how to change the siren:

-- Client-side script
local car = ... -- reference to the vehicle model
local evhEvent = car:WaitForChild("EVHEvent")

-- Toggle standard siren
evhEvent:FireServer("Input", Enum.UserInputState.Begin, Enum.UserInputType.Keyboard, Enum.KeyCode.R) -- replace 'R' with your siren keybind

-- Turn hold siren on
evhEvent:FireServer("Input", Enum.UserInputState.Begin, Enum.UserInputType.Keyboard, Enum.KeyCode.H) -- replace 'H' with your hold siren keybind
-- Turn hold siren off
evhEvent:FireServer("Input", Enum.UserInputState.End, Enum.UserInputType.Keyboard, Enum.KeyCode.H) -- replace 'H' with your hold siren keybind

All Done!#

If you need to dynamically load sirens and keybinds, please see the Reading Siren Configurations section in the documentation for more information.

Made With ❤️ Parker