header YouTube
Clonk Livestream auf Twitch.tv!

Clonkspot

Featurewünsche für LegacyClonk

#37

Du findest meinen Vorschlag (Benutzern, die ihre Firewall(s) nicht richtig konfiguriert haben eine Meldung anzuzeigen) also nicht gut, weil die Erkennungstechnik (Portcheck) mit einer noch nicht implementierten Technik (Hole Punching), welche das Verbinden zum Host in nicht allen Fällen und nur über UDP ermöglicht nicht gut, weil diese Erkennungstechnik nicht mit Hole Punching kompartibel wäre und es zu fehlerhaften Meldungen kommen könnte?
Verstehe mich nicht falsch, ich habe nichts gegen Hole Punching es ist für mich aber keine optimale Lösung:

  • Ich schließe keine Kombination der Techniken aus, wo eine UDP-Verbindung auch durch den Hole Puncher getestet wird.
  • Wir haben bereits CREMA (Danke @Kanibal, davon wusste ich nichts), welches “nur” eingebunden werden müsste (ich sag das so leicht ich weiß…)
  • Nehmen wir an, dass Hole Punching funktioniert, ändert das nichts an der Tatsache, dass der Host seine Firewall nicht ordnungsgemäß konfiguriert hat. Die Verbindung muss nicht zwingend klappen.

Eine Meldung mit fehlgeschlagenem Hole Punching und geschlossenen Ports könnte dann so lauten:

Der Masterserver [oder “Wir haben”] hat festgestellt, dass deine Firewall nicht richtig konfiguriert ist. Die von deinem Client an dem Masterserver gemeldeten Ports

  • TCP 11112
  • UDP 11113
    [wieder einrücken] sind von außen nicht erreichbar. Das Umgehen der Firewall mittels Hole Punching schlug ebenfalls fehl. Dies bedeutet, dass sich deinem Spiel aus dem Internet kein Spieler anschließen kann, da du von außen nicht erreichbar bist. Lokale Mitspieler in deinem Netzwerk sind davon nicht betroffen [hier z.B. Fußnote mit Mousehover “Gilt nur, sofern deine PC-Firewall die Verbindungen zulässt.”]

Die entsprechende Meldung mit erfolgreichem Hole Punching und geschlossenen Ports:

Der Masterserver [oder “Wir haben”] hat festgestellt, dass deine Firewall nicht richtig konfiguriert ist. Die von deinem Client an dem Masterserver gemeldeten Ports

  • TCP 11112
  • UDP 11113
    [wieder einrücken] sind von außen nicht erreichbar. Das Umgehen der Firewall mittels Hole Punching war allerdings erfolgreich. Da du unter bestimmten Umständen für Spieler aus dem Internet erreichbar bist, können sich deinem Spiel manche Spieler möglicherweise anschließen. Lokale Mitspieler in deinem Netzwerk sind von dem Problem nicht betroffen [hier z.B. Fußnote mit Mousehover “Gilt nur, sofern deine PC-Firewall die Verbindungen zulässt.”].

Die Überprüfung darf gerne in den Einstellungen dauerhaft deaktivierbar sein, die Meldung darf gerne “für dieses Netzwerk” (erkennbar an ARP-Table -> MAC des Gateways) deaktiviert werden können.

Hole Punching sollte eine Notlösung für unseren Spieler X sein, der sein Routerpasswort vergessen hat und Firewalleinstellungen mangels technischem KnowHow sowieso nicht hinbekommt.

Edit: habe nochmal gesucht und es doch gefunden:

By default, Clonk uses port 11112 TCP and port 11113 UDP for game connections. For best speed it is recommended to forward both of these ports through your router or firewall.

https://wiki.openclonk.org/w/FAQ

0 Likes

#38

An der Stelle sind wir wohl geteilter Meinung. Idealerweise sollte meiner Ansicht nach alles einfach so funktionieren, ohne dass der Spieler irgendwelche Konfiguration verändern muss. Manuelle Konfiguration sollte die Notlösung sein. Heimanschlüsse, wo man am Router sinnvoll etwas konfigurieren kann sind dank DS-Lite und anderen CGNAT-Verfahren sowieso am aussterben. Deshalb denke ich auch, dass Entwicklungszeit besser bei der Verbesserung der Hole Punching-Verfahren aufgehoben ist.

Die entsprechende Info aus der OpenClonk-Wiki ist nicht falsch - die Ports entsprechend freizuschalten kann durchaus sinnvoll sein, ist aber auch nicht unbedingt notwendig.

Aber wir sind hier sowieso eigentlich bei LegacyClonk, wofür du nicht mich überzeugen musst. Vielleicht baut’s ja jemand dafür.

0 Likes

#39

Das sollte auf alle Fälle immer das höchstpriorisierte Ziel sein, sofern es irgendwie möglich ist.

Abgesehen davon hat es sich als unglaublich schwer herausgestellt, einem relativ ahnungslosen Clonk-Neuling zu erklären wie man Ports weiterleitet, damit er mit seinen Freunden zusammenspielen kann.
Dabei bekommen wir da wohl auch nur den Teil mit, der es in den IRC schafft.

Das einzige was mir an der “Hole-Punching wirds schon richten”-Einstellung nicht gefällt ist, dass es meines Wissens nach als unmöglich angesehen wird, zwischen zwei symmetrischen (hoffentlich habe ich den richtigen Begriff in Erinnerung) NATs zu punchen und generell ein symmetrisches NAT auf Host-Seite alles ziemlich verkompliziert.

Ich weiß zwar nicht wie das im Allgemeinen aussieht, aber angenommen ich hab meine manuellen Experimente sinnvoll durchgeführt und richtig interpretiert, sind sowohl das NAT das der Router vom A1-Festnetzanschluss zuhause macht (Port-Forwarding geht aber), sowie das NAT, über das mein mobiles Internet läuft symmetrische NATs.

Allerdings hab ich noch nicht probiert ob OCs-Hole-Punching bei diesen NATs funktioniert.
Das werde ich eventuell irgendwann noch nachholen.

0 Likes

#40

Hmm da habt ihr auch wieder recht.

Gehe ich richtig in der Annahme, dass mit IPv6 Unterstützung das NATten wegfiele und somit in einem SoHo-Netzwerk die einzige Hürde die lokale Firewall wäre? Ich hab halt etwas Bauchschmerzen eine Verbindungstechnik zu nutzen, die bei manchen funktioniert und bei manchen nicht.

0 Likes

#41

Ja, genau. Kein NAT mehr, es muss nur noch die Firewall überwunden werden, was aber zumindest für UDP exakt genauso funktioniert wie die NAT-Durchquerung. TCP dürfte mit IPv6 sogar auch machbar sein, das habe ich aber noch nicht implementiert. (Mit IPv4 braucht man da Heuristiken zur Portvorhersage.)

Du hast aber recht, dass es kein Wunderheilmittel ist. Ich würde es eher als eine Ergänzung sehen, die es zusätzlichen Spielern ermöglicht, online zu spielen (eben die Spieler, bei denen die NAT-Durchquerung nicht klappt, aber die einen IPv6-Anschluss haben). Diese Gruppe ist zugegeben aktuell nicht groß, das wird sich aber mit der Zeit bestimmt ändern (IPv6-Verwendung steigt, während die IPv4-Adressen knapper werden).

0 Likes

#42

Jetzt sind wir auf einem Nenner :slight_smile:
Ist es technisch möglich, dass LC Blockierregeln der Firewall für eingehende Verbindungen erkennt? Weil das wäre dann die letzte Hürde, die ich noch sähe.

Keine Ahnung, ob das aktuell immer noch so ist: Unter Windows hat sich CR immer aufgehängt (OpenGL), wenn die Firewall was wollte. Dann musste man den Prozess blind per cmd killen und die Firewallregel bestätigen.

0 Likes

#43

Featurewunsch #7 von Funni: Autorenfeld in den Einstellungen.
Da die Registrierprüffunktion außer Kraft gesetzt ist, gibt es keinen Autor mehr, insbesondere beim Abspeichern von Spielständen. Ein Feld in den Einstellungen zum Eingeben eines Autornamens wäre nicht schlecht. Standard könnte der Benutzername des Rechners sein. Da der Editor davon nicht betroffen ist, kann das ja hinten angestellt werden.

0 Likes

#45

Featurewunsch #8 von Funni: Auto-Nicht-Bereit
Aus aktuellem Anlass: Wenn man aus dem Spiel für eine Zeit von sagen wir mal 20 Sekunden raustabbt oder der Bildschrimschoner reingeht sollte der Client als nicht mehr Bereit gekennzeichnet sein.

0 Likes

#46

Auch könnte die Runde automatisch starten sobald alle Teilnehmer “Bereit” aktiviert haben, den Host zum Abbrechen des Timers und /start 0 zu zwingen ist unnötig und kann von der Engine abgenommen werden.

1 Like

#47

Featurewunsch #9 von Funni: Hintergrundbild des Packs auf allen Clients…
…sobald sie das Pack geladen haben. Sollte doch machbar sein.

EDIT: Steht bereits auf @Fulgen’s Todoliste

0 Likes

#48

Dann braucht der Host aber auch einen Bereit button und Clients ohne Spieler dürfen nicht beachtet werden.

0 Likes

#49

Steht auf meiner Todoliste.

0 Likes

#50

das kann man daran koppeln ob der Timer zum Rundenstart aktiv ist oder nicht - nur wenn ein Timer läuft, würde das Bereit-Signal aller Clienten den sofortigen Start auslösen.

Der Host benötigt keinen Bereit-Button - da er den Timer angestoßen hat ist er offensichtlich bereit.
Dafür könnte beim Host der Runde starten-Button blinken wenn bei inaktivem Timer alle Clienten Bereitschaft signalisieren.

Auf Nicht-Legacy Clonk-Spieler braucht man dabei keine Rücksicht nehmen da man mit ihnen sowieso nicht spielen kann.

0 Likes

#51

Ahso, hatte das so verstanden, dass der Timer automatisch startet. Dann ist meine Aussage natürlich murks, aber trotzdem dürften Clients ohne Spieler nicht beachtet werden oder? Der Host startet ja nicht sofort, sodass jeder Zeit zum joinen haben sollte.

0 Likes

#52

wenn ein Timer läuft, würde das Bereit-Signal aller Clienten den sofortigen Start auslösen.

Was ist dann der Sinn des Timers?

0 Likes

#53

Wird (gibt es schon?) es eine offizielle Servervariante (also ohne X11-Context, etc.), oder muss man die sich selber bauen? Da hätte ich nämlich den Wunsch, dass die Ein-/Ausgabe vielleicht in so was wie JSON, … kodiert ist. Würde Dinge einfacher machen z.B. bei Usernamen mit Doppelpunkten…

0 Likes

#54

Muss man selber bauen (in CMake USE_CONSOLE aktivieren).

Ein eigenes Format für Serverbuildausgaben gibt es bereits, ist allerdings noch in keinem öffentlich Repository zu finden, weil es erst besprochen werden muss.

0 Likes

#55

Gut dann mal schauen, wie ich es in einen Docker-Container rein bekomme.

Denkt an so was wie eine Ping aufruf und Rückgabe des momentanen Framecounters, damit man schauen kann, ob ein Script steck geblieben ist/der Server abgestürzt ist.

0 Likes

#56

Featurewunsch #10 von Funni:
Erkennung der Spracheinstellung des Betriebssystems und Frage nach Wechsel zur Betriebsystemsprache (z.B. beim Start), sollte diese in zukünftigen Versionen verfügbar sein.

Hinweistext jeweils in alter und neuer Sprache, mit “nicht mehr anzeigen”-option, die einen Registrywert setzt und in den Einstellungen zurücksetzbar ist.

0 Likes

#57

Wie sieht es mit einem Skalierungsmodus aus, wenn man Clonk auf höher auflösenden Displays spielt (alles was irgendwie größer ist als 1080p), oder das Display auch ein physisch kleiner wird, wird doch alles recht klein und muss die auflösung runter stellen, wodurch das bild meist nur unscharf wird oder auch ein beim Anwendungswechsel ein umschalten der Auflösung ausgelöst wird.

ich würde gerne Clonk einfach in der nativen Auflösung betreiben können und das Spiel einfach in einem 2x-Faktor.
Hier wäre auch eine Trennung von Spiel und Nutzeroberfläche wünschenswert, sodass das Spiel und die drumherum liegende UI unabhängig voneinander skalieren, damit z.B. das Hauptmenü oder die Kontextmenüs pixelgenau angezeigt werden während das gesamte Ingamegeschehen in zweifacher Skalierung läuft

0 Likes