7.7 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]
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
[WIP] DST Beispiel Profil Suchen und erläutern
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))
[...]
[WIP] Beispiele für DST Server Menü Handling suchen (auch wenn sehr ähnlich zu MC Server Menü)
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
Suchen von Mods und Einbinden in die Lade-Routine des DST Dedicated Servers
[WIP] Routine aufschreiben und hier erläutern -> Ermitteln der Mod-ID via Teilen -> Einbinden in den dedicated_server_mods_setup.lua im DSt Dedicated Server Steam Ordner
Einzelne Mod-Konfigurationen
[WIP] Routine hier aufschreiben und erläutern -> Methode A (Docs wälzen) -> Methode B (Via Hosted-Player-Server und Anpassungen direkt via Ingame-UI)