Zum Hauptinhalt springen
Version: bleeding-edge 🩸

Schnellstart

Starte einen Server und erstelle dein erstes Paket in weniger als 10 Minuten!

Einführung​

Willkommen beim Schnellstart-Leitfaden von nanos world! Nachdem du diesen Leitfaden durchgearbeitet hast, wirst du Folgendes lernen:

  1. Wie du deinen Server einrichtest und ihm beitrittst
  2. Wie du ein einfaches Paket mit grundlegenden Skripten erstellst
  3. Wie du Props und Entities per Scripting spawnst
  4. Wie du Spielereignisse abonnierst
  5. Wie du einen Character übernimmst
tip

Dieses Tutorial richtet sich an alle, die den nanos world Server noch nie zuvor verwendet haben und schnell loslegen möchten!

Schritt 1: Den Server herunterladen​

Um zu beginnen, musst du den nanos world Server herunterladen. Dafür gibt es drei Möglichkeiten:

  1. Verwende die ausführbare Datei unter nanos-world/Server/NanosWorldServer.exe (im Basis-Installationsordner des Spiels).
  2. Verwende SteamCMD, um den nanos world™ Dedicated Server herunterzuladen.
  3. Lade das Tool nanos world™ Dedicated Server über den Steam Client herunter.

Schritt 2: Ein einfaches Paket erstellen​

Nachdem du den Server heruntergeladen hast, erstellen wir ein einfaches Paket. Ein Paket ist eine Sammlung von Lua-Skripten, die auf dem Client oder Server ausgeführt werden, um mit dem Spiel zu interagieren.

Um ein neues Paket zu erstellen, verwenden wir das praktische CLI-Tool, um den Prozess zu beschleunigen. Öffne ein Terminal in deinem Serverordner und führe den folgenden Befehl aus:

./NanosWorldServer.exe --cli add package my-awesome-package

Dieser Befehl führt die Kommandozeilenschnittstelle (CLI) von nanos world aus, um dein neues Paket interaktiv zu erstellen. Du wirst aufgefordert, einige Informationen zu deinem Paket anzugeben, wie zum Beispiel dessen Namen, Autor, Version und Typ.

NanosWorldServer
INFO Please enter the Package Title: (my-awesome-package)
my-awesome-package
INFO Please enter the Package Author: ()
myself
INFO Please enter the Package Type ('script', 'game-mode', 'map' or 'loading-screen'): (game-mode)
script

Sobald du die Erstellung deines Pakets abgeschlossen hast, findest du einen neuen Ordner namens my-awesome-package/ innerhalb des Ordners Packages/. Dieser Ordner enthält drei weitere Ordner: Server/, Client/ und Shared/, sowie eine Konfigurationsdatei namens Package.toml.

Als Nächstes musst du dem Server mitteilen, dass er dein Paket beim Start laden soll. To do that, open the Config.toml file located in the server folder and find the packages = [] setting, under the [game] section.

Add your package name ("my-awesome-package") to the list of Packages that should be loaded:

Config.toml
[game]
# ...
packages = [
"my-awesome-package",
]
tip

The Config.toml is created automatically the first time the server starts. If you don't have it yet, start the server once (Step 4) and close it, or skip editing it and start the server with --packages my-awesome-package instead.

Schritt 3: Skriptfunktionen hinzufügen​

Jetzt, wo du ein Paket hast, ist es Zeit, ihm einige Skriptfunktionen hinzuzufügen. Skripte sind Code-Abschnitte, die vom Server/Client ausgeführt werden können, um benutzerdefinierte Spiellogik hinzuzufügen.

Um dein erstes Skript hinzuzufügen, öffne die Datei my-awesome-package/Server/Index.lua in deinem bevorzugten Editor. Diese Datei ist der Einstiegspunkt für serverseitige Skripte in deinem Paket.

tip

Wir empfehlen die Verwendung des Editors VSCode, da er eine nanos world Extension enthält, die dir beim Programmieren hilft!

Für dieses Beispiel fügen wir etwas Code hinzu, um einige Props in der Spielwelt zu spawnen:

Packages/my-awesome-package/Server/Index.lua
-- Gibt eine Nachricht in der Server-Konsole aus
Console.Log("Loading some Props =D")

-- Spawnt einige Props in der Spielwelt
local prop_table = Prop(Vector(200, 0, 0), Rotator(0, 0, 0), "nanos-world::SM_WoodenTable")
local prop_chair = Prop(Vector(400, 200, 0), Rotator(0, 0, 0), "nanos-world::SM_WoodenChair")
local prop_tire = Prop(Vector(600, 0, 0), Rotator(0, 0, 0), "nanos-world::SM_TireLarge")

Schritt 4: Den Server starten​

Jetzt starten wir den Server mit dem Paket, das du gerade erstellt hast! Doppelklicke dazu einfach auf die ausführbare Datei des Servers oder starte ihn über das Terminal:

./NanosWorldServer.exe
note

By default the server runs as the Playtest Steam App, which is what players currently use to join. The --steam_app parameter accepts playtest (default) or game, and players can only join servers running the same Steam App they launched.

Nach dem Start zeigt deine Konsole etwa Folgendes an:

NanosWorldServer
INFO nanos world (C) Copyright Go Horse Studios. All Rights Reserved.
INFO Starting Server at Port: 7777. Version: 1.9.0. Unreal Version: 5.7.4. Map: 'default-blank-map'.
INFO Loading Package 'my-awesome-package' (0.0.1)...
SCRIPT Loading some Props =D
INFO Package 'my-awesome-package' (0.0.1) loaded.
INFO Loading Package 'default-blank-map'...
INFO Package 'default-blank-map' (1.0.0) loaded.
SUCCESS Server started!
SUCCESS Server successfully connected to Steam! VAC Secure!

Du kannst sehen, dass dein Paket geladen wurde und den Text Loading some Props =D ausgegeben hat.

Schritt 5: Deinem Server beitreten​

Jetzt sehen wir uns die Ergebnisse im Spiel an! Open nanos world, go to Find Servers, click Quick Connect and connect to 127.0.0.1:7777.

Nach der Verbindung bist du ein fliegender Bauer und kannst die gespawnten Requisiten sehen! 😁

Extraschritt: Characters spawnen​

Du hast vielleicht bemerkt, dass du nur eine umherwandernde Seele bist, die herumfliegt, geben wir dir also etwas Fleisch! Dafür müssen wir mit einigen Spielereignissen interagieren.

Einen Character für den Player spawnen​

Fügen wir etwas Code in deiner Server/Index.lua hinzu, um einen Character zu spawnen, wenn ein Player dem Server beitritt:

Packages/my-awesome-package/Server/Index.lua
-- Funktion, um einen Character zu spawnen und einem Player zu übergeben
function SpawnCharacter(player)
-- Spawnt einen Character an Position X=0, Y=0, Z=0 mit den Standard-Konstruktorparametern
local new_character = Character(Vector(0, 0, 0), Rotator(0, 0, 0), "nanos-world::SK_Male")

-- Übergibt den neuen Character
player:Possess(new_character)
end

-- Abonniert ein Event, das ausgelöst wird, wenn Players dem Server beitreten
-- (d. h. wenn die Player-Entity spawnt)
Player.Subscribe("Spawn", SpawnCharacter)

-- Wenn dieses Paket geladen wird, haben wir noch keinen gespawnten und übergebenen Character, daher
-- iterieren wir über alle bereits verbundenen Players und geben ihnen ebenfalls einen Character.
-- Dies stellt sicher, dass du auch beim Neuladen des Pakets einen Character erhältst
Package.Subscribe("Load", function()
for k, player in pairs(Player.GetAll()) do
SpawnCharacter(player)
end
end)

To apply your changes, run the command in the server console: package reload my-awesome-package. This will live reload your Package and apply the changes immediately to all Players connected.

Jetzt hast du einen Character übernommen und kannst herumlaufen und mit den Props interagieren!

Den Character zerstören, wenn der Player den Server verlässt​

Beachte, dass der Character nicht automatisch zerstört wird, wenn der Player die Verbindung trennt. Dafür müssen wir uns für den Moment, in dem der Player den Server verlässt (Event Destroy), anmelden und den Character dann manuell zerstören.

Füge diesen Code hinzu:

Packages/my-awesome-package/Server/Index.lua
-- When Player leaves the server, destroy its possessing Character
Player.Subscribe("Destroy", function(player)
local character = player:GetControlledCharacter()
if (character) then
character:Destroy()
end
end)

To apply your changes, run the command in the server console: package reload my-awesome-package.

Conclusion​

Herzlichen Glückwunsch! You have finished your first basic Package and learned a lot!

Next, continue with Your First Game-Mode, which builds on this Package to add client scripts, a HUD and communication between server and client.

Weitere und detailliertere Informationen zu jedem in diesem Leitfaden erwähnten Thema findest du unter folgenden Links:

Server Configurationcore-concepts/server-manual/server-configuration Command-line Interface (CLI)core-concepts/server-manual/command-line-interface Packages Guidecore-concepts/packages/packages-guide Classes Guidecore-concepts/scripting/classes-guide Events Guidecore-concepts/scripting/events-guide Debugging & Loggingcore-concepts/scripting/debugging-and-logging