Passer au contenu principal
Version: latest - a1.11.0 ⚖️

Communication entre Packages

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

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

Événements personnalisés

tip

Pour plus d'informations et d'exemples sur l'utilisation d'événements personnalisés, veuillez vous référer aux Events.

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

Les événements personnalisés sont le moyen plus facile d'envoyer des données ou des informations à d'autres packages:

PackageOne/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)
PackageTwo/Server/Index.lua
Events.Subscribe("MyAwesomeEvent", function(parameter1, parameter2, parameter3)
Package.Log("Received " .. parameter1) -- Reçu: 123
Package.Log("Received " .. parameter2) -- Reçu: hello there
Package.Log("Received " .. parameter3) -- Reçu: tableau
end)
info

Note : L'appel d'événements déclenchera l'événement dans tous les Packages.

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"

-- Envoyez cet événement à tous les joueurs
Events.BroadcastRemote("GetThisFromServer", my_parameter1)

local player_02 = GetPlayerSomehow()

-- Ou envoyez cet événement à un joueur spécifique
Events.CallRemote("GetThisFromServer", player_02, my_parameter1)
Client/Index.lua
Events.Subscribe("GetThisFromServer", function(parameter1, parameter2, parameter3)
Package.Log("Received " .. parameter1) -- Reçu: "cool data from network"
end)
info

Note : L'appel d'événements réseau déclenchera l'événement dans tous les paquets de l'autre côté.

Fonctions exportées des Packages

Une autre façon de communiquer est d'utiliser les fonctions exportées. Avec les fonctions exportées, vous pouvez définir des fonctions dans votre Package qui peuvent être appelées par n'importe quel autre Paquet et avoir une valeur retournée.

info

Contrairement aux événements, les fonctions exportées peuvent renvoyer des valeurs où elles sont appelées. Mais vous ne pouvez appeler des fonctions exportées que depuis le même côté (Serveur ou Client\).

Exportation d'une Fonction

Pour exporter des fonctions, utilisez la méthode Package.Export():

PackageOne/Server/Index.lua
-- Définit une fonction que vous voulez exporter
function SpawnCoolWeapon(location, rotation)
local cool_weapon = Weapon(location or Vector(), rotation or Rotator(), ...)
return cool_weapon
end

-- Exporte la fonction pour pour qu'elle puisse être appelée par d'autres paquets.
Package.Export("SpawnCoolWeapon", SpawnCoolWeapon)

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

Pour appeler une fonction exportée dans un autre Package, utilisez la méthode Package.Call():

PackageTwo/Server/Index.lua
-- Appelle la fonction exportée
local cool_weapon = Package.Call("PackageOne","SpawnCoolWeapon", Vector(), Rotator())

Utilisation de Package.RequirePackage

La dernière façon de communiquer entre les Packages est de charger d'autres Packages à l'intérieur du Package actuel :

PackageOne/Server/Index.lua
Package.Log("Hello from Package One!")
PackageTwo/Server/Index.lua
Package.RequirePackage("PackageOne")

Package.Log("Hello from Package Two!")

Résultat

Hello from Package One!
Hello from Package Two!

Cela va charger le fichier Index.lua du Package 1 dans la VM du Package 2 où vous avez appelé Package.RequirePackage().

Le paquet requis sera également envoyé aux clients, alors vous pouvez RequirePackage également dans le côté client.

note

Pour pouvoir RequirePackage dans le Client, vous devez d'abord le RequirePackage dans le Serveur, afin qu'il puisse être chargé et envoyé aux Clients.