champions-of-luneraria/docs/port/U4-NETWORK.md
Martin Stickelbroeck 4d6ed17dca U1: Regelkern in C#, verhaltensgleich zur Godot-Referenz
Vollständiger, engineunabhängiger Regelkern (Luneraria.Core, ohne
UnityEngine): Partie mit sechs Plätzen und zwei Teams, private Planung mit
atomarer Übernahme, Gold, Käufe, Aufwertungen, Formation, drei Lanes mit
zwei Laneturmen und zwei Basistürmen je Team, Ancients, unbegrenzte Wellen,
Helden mit Stufen, Items und Talenten, Angriffschampions, Bossgrotte mit
Anspruch, Entsendung, Kopfgeld und dreirundiger Sperre, Bots und
Siegbedingung (nur Ancient-Fall). Serverautoritative Befehlsschnittstelle.

- Deterministisch: fester Takt, geordnete Maps, fortlaufende IDs, kein
  Zufall, keine Uhr, keine Threads
- Tabellen einmal aus Godot erzeugt (tools/port/gen_content.py)
- Golden-Referenzen aus Godot (tools/godot-golden): 19 Szenarien,
  120 Snapshots, 51.221 Werte, Abweichung 0 (Toleranzen dokumentiert)
- Tests: content 75, core 91, m2 73, golden 157, determinism 6 = 402/402
- Leistung (M5): Simulationsschritt 0,259 ms statt 1,587 ms in GDScript
- Referenzfehler R1 im Bot-Gedächtnis bewusst übernommen und dokumentiert
- Geplante Helden (Lucy, Ghaliga, Siegfried, Feena) im Datenmodell, inaktiv
- Doku unter docs/port (U1-RULES, PORT-STATUS, PORT-QA, U2 bis U5)

Unity-Editor-Lauf offen: Die Unity-Lizenz ist noch nicht aktiviert; gebaut
und getestet mit dem .NET 8 SDK auf Unitys Sprachstand (C# 9, .NET
Standard 2.1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 14:31:18 +02:00

1.9 KiB

U4 · Netzwerk

Stand: 30. September 2026 · nicht begonnen. Das Netzwerk folgt erst nach funktionierendem lokalen Spiel.

Es wird keine neue Architektur erfunden. Übertragen wird der M4-Umfang (lune_session.gd, Protokoll 4), serverautoritativ:

  • Clients senden Absichten.
  • Der Host berechnet Gold, Käufe, Kampf, Schaden, Besitz, Boss und Sieg.

Erfasster M4-Umfang

Funktion Verhalten in der Referenz
Rollen offline (lokaler Host mit Bot-Plätzen), Host (ENet-Server, bis 5 Gäste), Gast
Sechs Plätze ein Peer genau ein Platz; freie Plätze spielen Bots; Lobbyeinträge mit Name, Bereit, Bot
Beitritt Hallo mit Protokollversion und Name; falsche Version wird abgelehnt; Namen gekürzt (24 Zeichen); volle Partie abgelehnt
Private Planung ein Gast sendet Befehle für seinen Platz; fremde Plätze werden abgelehnt (Spoof-Schutz); der Zustand enthält nur den eigenen Entwurf
Bereit nach Bereit ist die Planung verbindlich; alle bereit → Kampf; Bots planen einmal je Runde
Kampfsynchronisation Kampfbeginn mit Einheitendatensätzen und Gebäude-HP; alle 0,05 s neue Einheiten und ein Frame (13 Werte je Einheit, ungeordnet-zuverlässig); Gast interpoliert, verspätete Frames werden verworfen
Abrechnung Host sendet den öffentlichen Zustand nach dem Kampf
Disconnect Platz geht an einen Bot, der in der Planung sofort plant; niemals Kernverlust
Wiedereinstieg gleicher Name, solange der Platz bot-gehalten ist → Platz zurück, volle Synchronisation
Übernahme ein neuer Mensch verwirft den unbestätigten Bot-Entwurf und muss selbst bereit melden
Revanche Host startet neu, Plätze bleiben
Hostverlust Gast kehrt mit Meldung ins Menü zurück
Tests test_lune_net 43 Prüfungen, net_rounds.py Loopback mit zwei Prozessen 12 Prüfungen

Mindestumfang des Ports: Ready, private Planung, Bot-Übernahme, Wiedereinstieg, Snapshots, Revanche, Disconnect, sechs Plätze.