Packages Communication
Older/Work In Progress Page
- This page was initially written for an older version of Helix, has not been updated, and may be out of date!
- Contributions are more than welcome (see buttons at the top right of the page).
All you need to know to communicate between different Packages
In HELIX there are 2 main ways which you can interact with other Packages. In this page we will explain in details how to do so.
Custom Events#
Communicating with Packages in the same Side#
Custom Events are the easier way to send or receive generic data or information to other packages:
local my_parameter1 = 123
local my_parameter2 = "hello there"
local my_parameter3 = { important_stuff = "omg!" }
Events.Call("MyAwesomeEvent", my_parameter1, my_parameter2, my_parameter3)
Events.Subscribe("MyAwesomeEvent", function(parameter1, parameter2, parameter3)
Console.Log("Received " .. parameter1) -- Received 123
Console.Log("Received " .. parameter2) -- Received hello there
Console.Log("Received " .. parameter3) -- Received table
end)
Sending data through the network#
Sending information through the network is not different from sending in the same side:
local my_parameter1 = "cool data from network"
-- Call this event to all Players
Events.BroadcastRemote("GetThisFromServer", my_parameter1)
local player_02 = GetPlayerSomehow()
-- Or call this event to a specific player
Events.CallRemote("GetThisFromServer", player_02, my_parameter1)
Events.Subscribe("GetThisFromServer", function(parameter1, parameter2, parameter3)
Console.Log("Received " .. parameter1) -- Received cool data from network
end)
Tip
For more information and examples about using Custom Events, please refer to Events.
Exporting Variables Globally#
Another way of communicating is using Package.Export()
method, it allows exposing variables (tables, functions, etc) globally so all other Packages can access it directly.
Info
Unlike events, exported functions can return values to the caller. But exported functions are only available to the same side (Server or Client).
Exporting a Function#
With that, you can export functions for example, like that:
-- Defines a function which you want to export
function SpawnCoolWeapon(location, rotation)
local cool_weapon = Weapon(location or Vector(), rotation or Rotator(), ...)
return cool_weapon
end
-- Exports the function to be called by other Packages
Package.Export("SpawnCoolWeapon", SpawnCoolWeapon)
You can even export a whole table containing functions for example, to work as a library:
-- Defines a table with functions which you want to export
MyAwesomeLibrary = {
CoolMethod = function(a, b)
return a + b
end,
AnotherAwesomeImportantMethod = function(c, d)
return c * d
end
}
-- Exports the table to be accessed by other Packages
Package.Export("MyAwesomeLibrary", MyAwesomeLibrary)
Calling an Exported Function from another Package#
Now you can access that directly from other packages:
-- Calls the exported function
local cool_weapon = SpawnCoolWeapon(Vector(), Rotator())
-- Calls the exported table
local awesome_result = MyAwesomeLibrary.CoolMethod(123, 456)