# 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: ```plaintext "C:\Users\4lexK\Desktop\GameServers\Dont Starve\" > ***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: 1. Neues GameServer Profil hinzufügen [WIP] DST Beispiel Profil Suchen und erläutern ``` python 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. 2. 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. ``` python #### # 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. 3. In der Funktion handle_callback werden die callback_data IDs verarbeitet: ``` python 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)