12 KiB
Anleitung: Dont Starve Together-Server auf unserem NUC-GameServer einrichten
Diese Anleitung führt dich Schritt für Schritt durch den Prozess der Einrichtung eines Dont Starve Together-Servers auf dem NUC-GameServer.
Bei fragen gerne immer Alex oder jemand anderen Admin-fähiges fragen.
Schritt 1: Entscheiden, welche Art Server man aufbauen will (Vanilla oder Modded)
Bevor du loslegst, musst du entscheiden, ob du einen Vanilla-Server (unmodifizierte Version) oder einen modded Server (mit Modifikationen) einrichten möchtest.
Tipp: Vanilla-Server eignen sich für einfache Multiplayer-Erlebnisse ohne zusätzliche Modifikationen, während modded Server eine Vielzahl von neuen Funktionen und Inhalten bieten.
Schritt 2: Basis Dedicated Server Daten beschaffen/kopieren
Spielbare Welten in DST werden "Shards" genannt. Üblicherweise besteht eine "komplette" Welt aus einem Overworld- und einem Cave-Shard. Aber das ist nicht festgelegt. Theoretisch können Overworlds und Caves beliebig miteinander verwoben werden (Multi-Overworld oder Multi-Caves Welt). Je Shard wird immer ein Server-Prozess gestartet.
In Steam kann man einfach den "Dont Starve Together Dedicated Server" Installieren und einmal starten. Dadurch wird im Installationsverzeichnis des Dedicated Servers zwei Template Shard-Ordner erstellt. Der einfachheit halber, ist unserem Dont Starve Together Server-Root Ordner (C:\Users\4lexK\Desktop\GameServers\Dont Starve\Template Folders for new Servers) genau diese Template Ordner bereits enthalten.
Schritt 3: Kopieren der Temoplate-Shard-Ordner in den NUC-GameServers Ordner zu Dont Starve Together
Nachdem du die Server-Ordner extrahiert/aus den Templates kopiert hat, müssen diese in einen neuen Ordner im Dont Starve Together Root Ordner auf deinem NUC-GameServer entpackt werden.
- Beispiel: Entpacke die Dateien in den folgenden Pfad:
"C:\Users\4lexK\Desktop\GameServers\Dont Starve\<Dein Ordner Name>"
Hinweis: Zurzeit (08/2024) sind folgende Server aktiv:
- Don't Starve at Sanders (Vanilla)
- Don't Starve weirdly at Sanders (Modded)
Schritt 4: Validieren und Konfigurieren der Serverdaten.
Beispiel: In jedem Server-Shard-Ordner mussen folgende Elemente enthalten sein:
- Cluster Ordner
-> Master Ordner
-> cluster.ini
-> cluster_token.txt
To be continued ... [WIP]
Zunächst muss der Server einmal initial gestartet werden um die eula.txt erzeugen zu lassen. Dafür einmal entweder die Minecraft[...].jar (bei Vanilla) oder die Forge[...].jar (bei modded) regulär ausführen. Der Server fährt dann hoch und bricht dann nach erzeugen der eula.txt ab. Diese muss geöffnet und der False wert auf True geändert werden um die Eula zu akzeptieren.
Im Anschluss muss die server.properties Datei mit einem Texteditor angepasst werden. Viele der Parameter hier sind geschmackssache und können bei Bedarf und interesse recherchiert und geändert werden. Die wichtigsten drei Einstellungen sind
- Die "level"-Parameter:
- level-name=[NameDerWelt z.b. SanderPack]
- level-seed=[EineZahl die den Startwert der Generierung bestimmt z.b. 08062021]
- level-type=[Typ der Welt z.b. BIOMESOP für Biomes O Plenty oder DEFAULT für reguläres Survival]
- motd: Dieser stellt die Welt-Beschreibung dar, welche im Multiplayer Menu unter dem Icon und dem Namen angezeigt wird.
- Die "server"-Parameter:
- server-ip=[üblicherweise die IP mit der die Welt erreichbar ist; sollte stehts leer sein damit die Host-Maschinen IP gewählt wird]
- server-port=[Der Port auf der Maschine auf dem gehostet wird. Default 25565. Beim Betreiben mehrerer Server müssen die Ports jeweils umgeändert werden, da immer nur ein Port gleichzeitig verwendet werden kann]
Step 5: Anbinden an Nuc Morroc Telegram Bot.
Wir haben einen Telegram-Bot, welcher das Ansteuern und Verwalten der GameServer übernimmt. Der Bot ist unter folgendem Username zu erreichen.
@sander_nuc_morroc_bot
Bei erstem Kontakt (oder dem /start Befehl) wird man nach einem Passwort gefragt. Dieses lautet: 29102021
Um die Funktionen und den Menu-Eintrag beim Bot korrekt einzufügen muss man eine Anpassung an unserem Osiris_listener Git-Repo (https://sandergit.iamsander.de/Alex/osiris_listener).
Hier gibt es das Skript osiris_listener_telegram.py
In diesem Skript müssen folgende Anpassungen gemacht werden:
- Neues GameServer Profil hinzufügen
gaming_server_profiles = {
# Minecraft
"mc_vanilla" : {
'profile_id': 'vanilla',
'server_name': 'Vanilla 1.21',
'directory': 'C:/Users/4lexK/Desktop/GameServers/Minecraft/Vanilla_1-21/',
'command': ['C:/Program Files/Java/jdk-22/bin/java.exe', '-Xmx1024M', '-Xms1024M', '-jar', 'minecraft_server.1.21.jar', '--nogui', '--bonusChest'],
'wait_time': 30
},
Hierbei gelten folgende Regeln:
- profile_id -> Wird genutzt in diversen Mechaniken
- server_name -> Wird genutzt in Status-Nachrichten
- directory -> Zeigt immer auf den Root-Ordner des Servers
- command -> Liste aus Command und Parametern (siehe etwaige Launch-Skripte oder auf der Seite des Server-File Providers welche Params empfohlen werden)
- wait_time -> Rudimentäre Schätzung wie lange das Skript warten soll wenn ein Server seinen SIGINT (CTRL-C) erhalten hat und sich vollständig heruntergefahren hat
Beispiel: Falls beim Server-Zip ein Launchskript (.bat oder .sh File) enthalten ist, kann das direkt benutzt werden um start-Parameter für diese Zeilen zu extrahieren.
- Hinzufügen von einem Untermenü für den Telegram Bot
Hierzu kann an den restlichen nested Menüs nach Beispielen für Optionen gesucht werden.
####
# Nested Menu Bäume
####
main_menu = [
[
{"text": "Tool Commands", "callback_data": "tools"},
],
[
{"text": "Game Server", "callback_data": "game_servers"}
]
# Add neue Hauptmenu Elemente hier
]
tools_menu = [
[
{"text": "<- Zurück", "callback_data": "nuc_back"}
],
[
{"text": "Status", "callback_data": "nuc_satus"},
{"text": "Shutdown", "callback_data": "nuc_shutdown"},
]
# Add neue Tool Commands here
]
Hierbei gilt: Jedes Menü (z.b. tools_menu) enthält Listen von Buttons mit Daten. Diese Daten enthalten immer "text" -> Der Text im Button und "callback_data" -> eine ID zur Verarbeitung der Logik.
- In der Funktion handle_callback werden die callback_data IDs verarbeitet:
async def handle_callback(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
query = update.callback_query
await query.answer()
await start_timer(context, query.message.chat_id)
data = query.data
match data:
# Main
case "tools":
await query.message.reply_text("Wähle eine Tool Funktion:", reply_markup=InlineKeyboardMarkup(tools_menu))
case "game_servers":
await query.message.reply_text("Wähle einen Gameserver Typ:", reply_markup=InlineKeyboardMarkup(gameserver_menu))
# Tools
case "nuc_satus":
status = get_status_nuc()
await query.message.reply_text(f"Nuc Morroc Status (Auslastungen) \nCPU:{status["cpu"]}\nRAM:{status["ram"]}")
case "nuc_shutdown":
logging.info("Received request to shutdown.")
try:
os.system("shutdown /s /t 1")
await query.message.reply_text(f"Nuc Morroc wird heruntergefahren")
except Exception as exc:
logging.error(f"Error executing shutdown command: {exc}")
await query.message.reply_text(f"Fehler beim herunterfahren des Nuc Morroc.")
[...]
# MC Sanderpack (The 1.12.2 Pack)
case "mc_sanderpack_start":
msg = start_gameserver("mc_sanderpack")
await query.message.reply_text(f"{msg}")
case "mc_sanderpack_stop":
msg = stop_gameserver("mc_sanderpack")
await query.message.reply_text(f"{msg}")
case "mc_sanderpack_back":
await query.message.reply_text("Wähle einen Minecraft Server:",
reply_markup = InlineKeyboardMarkup(minecraft_menu))
[...]
Zu beachten ist, dass jede Message awaited werden muss.
Step 6 Testen
Hierbei werden die neuen Infos getestet (via Code und via Bot) um sicher zu stellen, dass alles mit Rechten Dingen zugeht.
Notiz:
Nie eine Funktion/Button einbauen der Pauschal alle GameServer / große Mengen der Server Started. Der Rechner wird mit ziemlicher Sicherheit in die Knie gehen.
Zusatzinfos
Setzen von Admins (OPs)
In jedem Server-Root Ordner sollte eine Datei Namens "ops.json" enthalten sein (spätestens nach erstem hochfahren des Servers).
In dieser Datei werden alle Admins (OPs) und weitere Nutzer mit erhöhten Rechten eingetragen.
Hier ein Beispiel:
[
{
"uuid": "4363e821-880d-4950-b492-b27682aa0202",
"name": "4lexKidd",
"level": 3,
"bypassesPlayerLimit": false
},
{
"uuid": "f867bc59-62b2-4019-9b9a-8a0216bef6e2",
"name": "F0xy_Br0wn",
"level": 3,
"bypassesPlayerLimit": false
}
]
Erläuterungen:
- uuid: Kann extrahiert werden aus der Datei "usercache.json". Nachdem ein Spieler sich zum ersten Mal einloggt wird diese uuid dort eingetragen. Diese ist einzigartig für jeden Spieler und immer gleich(Kann von anderen Server Konfigs kopiert werden).
- name: Ist der Spieler Name
- level: Ist das Rechte Level (0 = Rechteloser Spieler bis 3 = Voll-Rechte Admin)
- bypassesPlayerLimit: Boolscher Wert der bestimmt, ob ein Spieler immer Zugang erhalten soll egal ob das Spieler Limit des Servers erreicht ist. Bei True darf der Spieler immer auf den Server.
Falls interesse besteht mehr rechte einzuräumen (gerade uns Sanders, falls wir mit Gästen spielen), sollten diese Einträge gemacht werden und unsere Accounts höhere Rechte erhalten.
Setzen von Whitelist-Spielern
Falls bemerkt wird, dass zu viele aussenstehende sich auf dem Server herumtreiben und man wieder nur eine ausgewählte Menge Spieler erlauben will, kann man eine Whitelist aktivieren.
In jedem Server-Root Ordner gibt es dafür eine whitelist.json. Diese wird ähnlich der OP-Liste gepflegt:
[
{
"uuid": "4363e821-880d-4950-b492-b27682aa0202",
"name": "4lexKidd",
"level": 3,
"bypassesPlayerLimit": false
},
{
"uuid": "f867bc59-62b2-4019-9b9a-8a0216bef6e2",
"name": "F0xy_Br0wn",
"level": 3,
"bypassesPlayerLimit": false
}
]
Zusätzlich zu den Usern muss im server.properties die Konfiguration
white-list=false
auf true gesetzt werden, damit die whitelist angewendet wird und jeder auto-geblockt wird, der nicht darauf steht.
Einzelne Mod-Konfigurationen
Im Server-Root Ordner müsste ein "Config" Ordner enthalten sein. Hier sind Konfigurationsdateien zu jedem Mod seperat enthalten.
In diesen sind üblicherweise ein bzw. mehrere .cfg Dateien enthalten. Diese können fein-getuned werden aber vorsicht, man sollte sich im klaren sein was man tut weil man an vielen stellen verherende Balancing Probleme inkludieren kann.
Üblicherweise sind Modpacks in dieser Hinsicht gut gebalanced und benötigen keine einzel Mod-Anpassungen mehr.
Eigenes Custom Server-Icon für das Multiplayer-Menu bauen.
Damit das Icon korrekt geladen werden kann, darf es die Größe 64 x 64 nicht überschreiten.
Zur Vereinfachung liegt beim osiris-listener Repo eine Gimp-Arbeitsvorlage ("server_icon.xcf") bei.
Nach Bearbeitung muss das Icon nur als server_icon.png exportiert und in den gewünschten Ordner gepackt werden. Der Serverstart wird das neue Icon automatisch erkennen und versuchen es zu laden.