Events
The Events system is the primary communication mechanism in HELIX. It enables structured data transfer between the client and server using global registration and triggering functions. Events support strings, numbers, booleans, nil, vectors, and tables as arguments.
tip
The triggering controller is passed automatically as the first parameter when a client triggers a server event -- similar to how source is passed in FiveM.
Core Functions
| Function | Parameters | Authority | Description |
|---|---|---|---|
RegisterClientEvent | name: string, callback: function | Client | Registers a client-side event handler. Called when the server triggers an event targeted at this client. |
RegisterServerEvent | name: string, callback: function | Server | Registers a server-side event handler. The triggering player controller is automatically passed as the first argument. |
TriggerClientEvent | controller: PlayerController, name: string, ...args: any | Server | Sends an event from the server to a specific client. All extra arguments are serialized and passed to the client handler. |
TriggerLocalClientEvent | name: string, ...args: any | Client | Sends an event from a client script to another client-side Lua package on the same client. |
TriggerServerEvent | name: string, ...args: any | Client | Sends an event from the client to the server. The triggering controller is passed automatically as the first argument to the server handler. |
TriggerLocalServerEvent | name: string, ...args: any | Server | Sends an event from a server script to another server-side Lua package, enabling cross-package communication without client involvement. |
BroadcastEvent | name: string, ...args: any | Server | Sends an event from the server to all connected clients. |
Examples
Registering and Triggering Events
- Blueprint
- Lua
- JavaScript
// Events are handled via Lua or JavaScript scripting.
// See the Lua and JavaScript tabs for usage examples.
-- CLIENT SCRIPT: Register a client event
RegisterClientEvent('TestClient', function(str, num, bool, nil_val, vec, tbl)
print('CLIENT TestClient EVENT')
print(' String:', str, 'Type:', type(str))
print(' Number:', num, 'Type:', type(num))
print(' Boolean:', bool, 'Type:', type(bool))
print(' Vector:', vec, 'Type:', type(vec))
print(' Table:', tbl, 'Type:', type(tbl))
end)
-- CLIENT SCRIPT: Trigger a server event from the client
TriggerServerEvent('TestServer', 'Hello from Client', 100, true, nil, Vector(100, 100, 100), { key = 'value' })
// Client-side event registration and triggering follows
// the same pattern using PuerTS or Helix JS bindings.
// Refer to the Lua examples for the function signatures.
Server-Side Event Handling
- Blueprint
- Lua
- JavaScript
// Server events are handled via Lua scripting.
-- SERVER SCRIPT: Register a server event
RegisterServerEvent('TestServer', function(controller, str, num, bool, nil_val, vec, tbl)
print('SERVER TestServer EVENT from', controller)
print(' String:', str)
print(' Number:', num)
-- Send a response back to the triggering client
TriggerClientEvent(controller, 'TestClient', str, num, bool, nil_val, vec, tbl)
end)
-- SERVER SCRIPT: Broadcast to all clients
BroadcastEvent('myClientEvent', 100)
// Server-side event registration follows the same pattern.
// Refer to the Lua examples for function signatures.
Cross-Package Communication
- Blueprint
- Lua
- JavaScript
// Cross-package events use the same Lua event system.
-- CLIENT: Trigger a local client event (client -> client, same machine)
TriggerLocalClientEvent('TestClient', "Hello", 100, true, nil, Vector(100, 100, 100), { value = 42 })
-- SERVER: Trigger a local server event (server -> server, cross-package)
TriggerLocalServerEvent('TestServer', 'Cross-package data', 100, true, nil, Vector(100, 100, 100), { key = 'value' })
// Local event triggering follows the same pattern.
// Refer to the Lua examples for function signatures.
caution
Events send data over the network. Supported argument types include strings, numbers, booleans, nil, vectors, and tables. Function references and complex objects cannot be sent remotely.