You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
osiris_listener/HowTo_Add DontStarveTogethe...

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:

  1. 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.

  1. 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.

  1. 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)