HookListener
HookListeners are returned by Hooks when you connect a listener function to them.
Properties
| Property Name | Return Type | Description | Tags | 
|---|---|---|---|
| isConnected | boolean | Returns trueif this listener is still connected to its hook,falseif the hook owner was destroyed or ifDisconnectwas called. | Read-Only | 
| priority | integer | The priority of this listener. When a given hook is fired, listeners with a higher priority are called first. Default value is 100. | Read-Write | 
Functions
| Function Name | Return Type | Description | Tags | 
|---|---|---|---|
| Disconnect() | None | Disconnects this listener from its hook, so it will no longer be called when the hook is fired. | None | 
Examples
Example using:
isConnected
priority
Disconnect
In this example, a client script implements a stun effect that prevents the local player from moving while one or more stuns are active.
local STUN_VFX = script:GetCustomProperty("StunVFX")
local STUN_DURATION = 1.5
local moveHookListener = nil
local stunVfx = nil
function ApplyStunToLocalPlayer()
    -- Get reference to the player
    local player = Game.GetLocalPlayer()
    -- Initialize stun count if needed
    if not player.clientUserData.stunCount then
        player.clientUserData.stunCount = 0
    end
    -- Keep track of how many times stun has been called, in case multiple stuns overlap in time
    player.clientUserData.stunCount = player.clientUserData.stunCount + 1
    -- Connect to the movement hook only once
    if not moveHookListener or not moveHookListener.isConnected then
        moveHookListener = player.movementHook:Connect(OnPlayerMovement)
        -- Set a low priority. In case other gameplay systems modify movement the stun happens last
        moveHookListener.priority = 20
    end
    -- Spawn a visual effect to communicate the stun, in case it doesn't exist yet
    if not stunVfx then
        local playerPos = player:GetWorldPosition()
        stunVfx = World.SpawnAsset(STUN_VFX, {position = playerPos})
    end
    -- Duration of the stun effect
    Task.Wait(STUN_DURATION)
    -- Stun effect has passed. Decrease the counter
    if player.clientUserData.stunCount > 0 then
        player.clientUserData.stunCount = player.clientUserData.stunCount - 1
    end
    -- If there are no more stuns active, cleanup
    if player.clientUserData.stunCount == 0 then
        stunVfx:Destroy()
        moveHookListener:Disconnect()
        moveHookListener = nil
    end
end
-- A server script will initiate the stun by calling `Events.BroadcastToPlayer()`
Events.Connect("StunPlayer", ApplyStunToLocalPlayer)
function OnPlayerMovement(player, params)
    if player.clientUserData.stunCount
    and player.clientUserData.stunCount > 0 then
        -- Prevent player from moving while there's an active stun
        params.direction = Vector3.ZERO
    end
end
See also: Hook.Connect | Player.movementHook | Events.BroadcastToPlayer | World.SpawnAsset | CoreObject.Destroy | Task.Wait | Vector3.ZERO
    
      Last update:
      December 7, 2021