Die Ausgangssituation ist, dass es in Unity (Netcode für GameObjects) einen Prototypen eines kooperativen Spiels für 2-8 Spieler gibt. Bei P2P sind Probleme aufgetreten – nicht synchron, keine Verzögerungskompensation, der Host beendet sich – das Spiel bricht zusammen, Betrüger ändern die Schadens- und Geschwindigkeitsparameter. Sie müssen zu einem dedizierten, seriösen Server mit Räumen, Matchmaking und minimalem Anti-Cheat wechseln und dabei die aktuelle Kampf- und Inventarlogik beibehalten. Technische Umgebung – Linux (Ubuntu 22.04), Docker, Node.js 20 LTS, Colyseus 0.15+, Redis (für Warteschlangen und Präsenz), PostgreSQL (für Konten und Fortschritt), Nginx (TLS-Terminierung), GitHub Actions (CI). Unity 2022 LTS-Client, WebSocket-Transport (kein WebRTC). Bereitstellung in einer Region (noch nicht in mehreren Regionen). Was passieren sollte, ist ein funktionierendes Server-Backend mit einer zuverlässigen Simulation der wichtigsten Mechanismen (Bewegung, Einstecken von Schaden, Tod/Respawn, Beute und Inventar) und einer Match-Infrastruktur. Das Ergebnis sollte in Docker Compose reproduzierbar bereitstellbar sein und über einen grundlegenden Satz an Metriken/Protokollen für die Diagnose verfügen. Arbeitsumfang nach Etappen 1) Analyse des aktuellen Netzwerkmodells – Analysieren Sie das Client-Nachrichtenprotokoll, markieren Sie die Zustände, die zu Serverzuständen werden sollen, und schlagen Sie ein Ereignis-/Snapshot-Schema vor. Das Ergebnis sollte ein ein- bis zweiseitiges Dokument mit einer Liste des maßgeblichen Status, einer Liste der Client-Befehle und einem Migrationsplan sein. 2) Implementierung des Colyseus-Servers - Ordnen Sie Räume dem Lebenszyklus zu: Warten – Starten – Spielen – Beenden - Matchmaking nach Modus und MMR-Bereich (vereinfacht) mit einer Warteschlange in Redis - Autorisierende Verarbeitung von Client-Befehlen: Bewegung eingeben, Gegenstand verwenden, angreifen, aufnehmen, fallen lassen - Servervalidierung: Geschwindigkeit, Angriffsfrequenz, Aufnahmeradien, Abklingzeiten - Tickrate 20/s, Status-Snapshots 10/s, Interpolation auf dem Client bleibt auf der Unity-Seite (Sie müssen das Datenformat bestimmen) 3) Speichern und fortfahren - PostgreSQL-Schema: Benutzer, Sitzungen, Fortschritt (Minimum), match_results - JWT-Autorisierung (Zugriffstoken) und Serververifizierung am Eingang des Raums - Spielergebnisse aufzeichnen und MMR aktualisieren 4) Anti-Cheat-Mindestniveau - Ratenbegrenzung für Befehle - Server prüft auf unmögliche Zustände (Teleport, Speedhack, Schnellfeuer) - Verstoßsystem: N verdächtige Ereignisse pro Spiel – in match_results markieren und aus dem Raum werfen 5) Infrastruktur und Qualität - Docker Compose: Gameserver, Redis, Postgres, Nginx - Gesundheitschecks, strukturierte Protokollierung (Pino oder ähnlich), grundlegende Metriken (Prometheus-Endpunkt oder einfache Zähler in /metrics) - GitHub-Aktionen: Linting, Tests (Mindesteinheit für Befehlsvalidierung), Erstellen eines Docker-Images Einschränkungen - Sie können keine verwalteten Dienste nutzen, alles muss auf einer Maschine in Docker Compose funktionieren - Ohne den Kauf kostenpflichtiger Anti-Cheat-Lösungen und ohne Kernel-Treiber - Der Unity-Client kann nur minimal geändert werden – es ist möglich, eine dünne Adapterschicht für ein neues Protokoll und eine neue Interpolation hinzuzufügen, ohne jedoch das gesamte Spiel neu zu schreiben - Externe Abhängigkeiten sollten verbreitet sein und aktiv gepflegt werden Messbare Akzeptanzkriterien – Wird mit einem Docker-Compose-Up-Befehl ausgelöst, woraufhin Folgendes verfügbar ist: /health, /metrics, Übereinstimmungen erstellen und Clients verbinden - Bei einer Auslastung von 8 Spielern in einem Raum hält der Server 20 Ticks/s ohne eine Verschlechterung von mehr als 10 % auf einem 4-vCPU-8-GB-Computer aufrecht (überprüft mit einem einfachen Bot-Skript oder einem integrierten Ladeskript). - Der Server lehnt mindestens 5 Arten von Cheat-Befehlen ab: Geschwindigkeitsüberschreitung, beschleunigter Angriff, Versuch, Schaden anzurichten, ohne das Servermodell zu treffen, Beute außerhalb des Radius aufsammeln, Spam-Befehle über das Limit hinaus - Match-Ergebnisse werden in PostgreSQL geschrieben, MMR wird aktualisiert, Benutzer-Neuanmeldung speichert Fortschritt - Das Repository verfügt über eine README-Datei mit Startschritten, Umgebungsvariablen und einer Beschreibung des Nachrichtenprotokolls Verfügbare Materialien – aktuelles Unity-Projekt (Repository), Beschreibung der Spielmechanik, Liste der Nachrichten/Ereignisse im aktuellen Prototyp. Das endgültige PR/Repository mit dem Server, den Konfigurationen, Datenbankmigrationen und den minimalen Client-Änderungen, die für die Verbindung mit dem neuen Server erforderlich sind, wird erwartet.