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
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:
local my_parameter1 = 123
local my_parameter2 = "halllo"
local my_parameter3 = { important_stuff = "omg!" }
Events.Call("MyAwesomeEvent", my_parameter1, my_parameter2, my_parameter3)
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)
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:
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)
Events.Subscribe("GetThisFromServer", function(parameter1, parameter2, parameter3)
Package.Log("Empfangen" .. parameter1) -- Erhaltene coole Daten vom Netzwerk
Ende)
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.
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:
-- 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:
-- 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:
Package.Log("Hallo von Paket Eins!")
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.
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.