Passer au contenu principal
Version: bleeding-edge 🩸

Communication entre Packages

Tout ce que vous avez besoin de savoir pour communiquer entre différents Packages

Dans nanos world, il existe 2 façons principales d'interagir avec d'autres Packages. Dans cette page, nous vous expliquerons en détail comment faire.

Événements personnalisés​

Communiquer avec les Packages du même côté​

Les événements personnalisés sont le moyen le plus simple d'envoyer ou de recevoir des données ou informations génériques vers d'autres Packages :

package-one/Server/Index.lua
local my_parameter1 = 123
local my_parameter2 = "hello there"
local my_parameter3 = { important_stuff = "omg!" }

Events.Call("MyAwesomeEvent", my_parameter1, my_parameter2, my_parameter3)
package-two/Server/Index.lua
Events.Subscribe("MyAwesomeEvent", function(parameter1, parameter2, parameter3)
Console.Log("Received " .. parameter1) -- Received 123
Console.Log("Received " .. parameter2) -- Received hello there
Console.Log("Received " .. parameter3.important_stuff) -- Received omg!
end)

Envoi de données via le réseau​

L'envoi d'informations via le réseau n'est pas différent de l'envoi dans le même côté:

Server/Index.lua
local my_parameter1 = "cool data from network"

-- Call this event to all Players
Events.BroadcastRemote("GetThisFromServer", Reliability.Reliable, my_parameter1)

local player_02 = GetPlayerSomehow()

-- Or call this event to a specific player
Events.CallRemote("GetThisFromServer", player_02, Reliability.Reliable, my_parameter1)
Client/Index.lua
Events.SubscribeRemote("GetThisFromServer", function(parameter1, parameter2, parameter3)
Console.Log("Received " .. parameter1) -- Received cool data from network
end)
tip

Pour plus d'informations et d'exemples sur les événements personnalisés, consultez Events.

Exporter des variables globalement​

Autre moyen de communiquer : la méthode Package.Export(), qui expose des variables (tables, fonctions, etc.) globalement pour que tous les autres Packages puissent y accéder directement.

info

Contrairement aux événements, les fonctions exportées peuvent renvoyer des valeurs où elles sont appelées. Mais les fonctions exportées ne sont disponibles que du même côté (serveur ou client).

Exportation d'une Fonction​

Vous pouvez par exemple exporter des fonctions comme ceci :

package-one/Server/Index.lua
-- Defines a function which you want to export
function SpawnCoolWeapon(location, rotation)
local cool_weapon = Weapon(location or Vector(), rotation or Rotator(), "nanos-world::SK_AK47")
return cool_weapon
end

-- Exports the function to be called by other Packages
Package.Export("SpawnCoolWeapon", SpawnCoolWeapon)

Vous pouvez même exporter toute une table de fonctions, pour qu'elle serve de bibliothèque :

package-one/Server/Index.lua
-- 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)

Appel d'une Fonction Exportée depuis un autre Package​

Vous pouvez maintenant y accéder directement depuis d'autres Packages :

attention

Une variable exportée n'existe qu'une fois que le Package qui l'exporte est chargé. Si votre Package en dépend, ajoutez le Package qui l'exporte aux packages_requirements de votre Package.toml, pour qu'il soit toujours chargé avant le vôtre. Voir Chargement des Packages et environnement Lua.

package-two/Server/Index.lua
-- Calls the exported function
local cool_weapon = SpawnCoolWeapon(Vector(), Rotator())
package-two/Server/Index.lua
-- Calls the exported table
local awesome_result = MyAwesomeLibrary.CoolMethod(123, 456)