Skip to main content
Version: bleeding-edge 🩸

Paketkommunikation

Alles, was Sie wissen müssen, um zwischen verschiedenen Paketen zu kommunizieren

In der nanos Welt gibt es 3 Hauptwege, die Sie mit anderen Paketen interagieren können. Auf dieser Seite werden wir Ihnen detailliert erklären, wie Sie dies tun können.

Eigene Ereignisse

tip

Weitere Informationen und Beispiele zur Verwendung benutzerdefinierter Events finden Sie unter Veranstaltungen .

Kommunikation mit Paketen auf der gleichen Seite

Benutzerdefinierte Ereignisse sind der einfachere Weg, Daten oder Informationen an andere Pakete zu senden:

PackageOne/Server/Index.lua
local my_parameter1 = 123
local my_parameter2 = "halllo"
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("Empfangen" .. parameter1) -- 123
Package.Log("Empfangen" .. parameter2) -- Hallo dort
Package.Log("Empfangen" .. parameter3) -- Empfangene Tabelle
end)
info

Hinweis: Aufrufetermine lösen das Ereignis in allen Paketen aus.

Daten werden über das Netzwerk gesendet

Das Senden von Informationen über das Netzwerk unterscheidet sich nicht vom Senden auf derselben Seite:

Server/Index.lua
local my_parameter1 = "coole Daten aus dem Netzwerk"

-- Rufe dieses Ereignis an alle Spieler
Events. roadcastRemote("GetThisFromServer", my_parameter1)

local player_02 = GetPlayerSomehow()

-- Oder rufen Sie dieses Ereignis an einen bestimmten Spieler
Events.CallRemote("GetThisFromServer", player_02, my_parameter1)
Client/Index.lua
Events.Subscribe("GetThisFromServer", function(parameter1, parameter2, parameter3)
Package.Log("Empfangen" .. parameter1) -- Erhaltene coole Daten vom Netzwerk
Ende)
info

Hinweis: Das Aufrufen von Netzwerk-Events löst das Ereignis in allen Paketen von der anderen Seite aus.

Pakete exportierte Funktionen

Eine andere Möglichkeit der Kommunikation ist die Verwendung von Exportierten Funktionen. Mit Exportierten Funktionen können Sie Funktionen in Ihrem Paket definieren, die von jedem anderen Paket aufgerufen werden können und einen Wert zurückgegeben bekommen.

info

Im Gegensatz zu Ereignissen können exportierte Funktionen Werte an den Anrufer zurückgeben. Sie können aber nur Exportierte Funktionen von der gleichen Seite (Server oder Client) aufrufen.

Exportieren einer Funktion

Für den Export von Funktionen verwenden Sie die Package.Export() Methode:

PackageOne/Server/Index.lua
-- Definiert eine Funktion, die Sie exportieren wollen
Funktion SpawnCoolWeapon(Position, Rotation)
lokale cool_weapon = Waff(Position oder Vector(), Rotation oder Rotator(), ...)
return cool_weapon
end

-- Exportiert die Funktion, die von anderen Paketen aufgerufen werden soll
Package.Export("SpawnCoolWeapon", SpawnCoolWeapon)

Eine Exportierte Funktion aus einem anderen Paket aufrufen

Für den Aufruf einer Funktion, die von einem anderen Paket exportiert wird, verwenden Sie die Package.Call() Methode:

PackageTwo/Server/Index.lua
-- Ruft die exportierte Funktion
lokale cool_weapon = Package.Call("PackageOne","SpawnCoolWeapon", Vector(), Rotator()) auf

Anforderungspaket des Pakets verwenden

Die letzte Möglichkeit, zwischen den Paketen zu kommunizieren, ist das Laden anderer Pakete innerhalb des aktuellen Pakets:

PackageOne/Server/Index.lua
Package.Log("Hallo von Paket Eins!")
PackageTwo/Server/Index.lua
Package.RequirePackage("PackageOne")

Package.Log("Hallo aus Two!")

Ausgang

Hallo vom ersten Paket!
Hallo vom Paket Two!

This will load the file Index.lua from PackageOne into the VM of PackageOne where you called Package.RequirePackage().

Also the Required Package will be sent to the clients, then you can RequirePackage in the client side too.

note

To be able to RequirePackage in the Client, you must first RequirePackage it in the Server, so it can be loaded and sent to Clients.