Multiplayer Server

  • Moin,



    bin grade richtig lost wie ich das ganze mit den Servern angehen muss.


    Hier erstmal wie ich es verstanden habe.


    Dedicated Server:

    Ein Extra Server führt so gut wie alle Funktionen aus und zeigt diese so gesehen denn Spielern an.


    Listen Server:

    Einer der Spieler ist der Server und führt die Funktionen aus.


    Da ich nicht will das die Spieler zugriff auf die Werte etc. der Karten haben. Sollte ich diese auf einem Server abspeichern und dann anhand z.b. des Steam Namens herausfinden welche der Karten der Spieler besitzt. Auch das abspeichern der Decks sollte auf den Server passieren.

    Dies wäre dann aber etwas ganz anderes als der eigentliche Spiel Server oder?


    Wenn ich das Spiel auf dem Spielfeld starte, im Editor, dann sind dort beide Spieler im selben Spiel. Ok.

    Starte ich über das MainMenü, dann landen beide in ihrem eigenen "Spiel".

    Was ja irgendwie logisch ist das sie nicht wissen das sie sich mit dem anderen verbinden sollen.


    Habe dann mal die Steam Advanced Session Plugin eingestellt. Funktioniert auch.

    Wäre dann aber sicherlich kein Dedicated Server mehr sondern eher ein Listen Server richtig?


    Habe dann wege gelesen wie man einen Dedicated Server für UE4 zum testen erstellt aus dem eigenen Project. Konverten zum c++ Projekt etc.

    Wäre aber bisschen doof das ganze erst immer zu packen um kurz was zu testen.



    Jetzt zu meiner eigentlichen Frage:

    Ich habe meine Karten, ich habe die Decks, worauf der Spieler kein Zugriff haben soll. Sodass er diese nicht verändern kann.

    Nach meinem Verstädnis brauche ich also einen Dedicated Server und eine z.b. MySQL Datenbank, richtig?


    Wie mache ich das am besten ums das Spiel auch venünftig zu testen?

    (Ich wurde mir dann sicher einen Server dafür mieten und diesen nicht auf meinem PC machen, muss ich ja dann sowieso irgendwann.)

  • Dedicated Server:

    Ein Extra Server führt so gut wie alle Funktionen aus und zeigt diese so gesehen denn Spielern an.


    Listen Server:

    Einer der Spieler ist der Server und führt die Funktionen aus.

    Soweit richtig.


    Zitat

    Dies wäre dann aber etwas ganz anderes als der eigentliche Spiel Server oder?

    Kommt darauf an. Wenn der Nutzer selber Server hosten soll - egal ob Dedicated oder als Listen Server - auf jeden Fall. Wenn du allerdings wie bei einem MMO die Server selbst hostest bzw. hosten lässt, kannst du es auch direkt in den Game-Server mit einbauen.

    Zitat

    Habe dann mal die Steam Advanced Session Plugin eingestellt. Funktioniert auch.

    Wäre dann aber sicherlich kein Dedicated Server mehr sondern eher ein Listen Server richtig?

    Genau.


    Zitat

    Nach meinem Verstädnis brauche ich also einen Dedicated Server und eine z.b. MySQL Datenbank, richtig?

    Wie mache ich das am besten ums das Spiel auch venünftig zu testen?

    Du kannst dir (falls du mit Windows arbeitest) z.B. mit xampp (https://www.apachefriends.org/de/index.html) einen lokalen Server - oder natürlich direkt einen MariaDB-Server (https://mariadb.com/kb/en/inst…adb-windows-zip-packages/). Dann brauchst du erstmal kein Geld ausgeben und kannst alles über den localhost testen.

    Also anstelle einer Verbindung zu deinemCoolenServer.example verbindest du dich einfach per HTTP mit localhost/

  • Du kannst dir (falls du mit Windows arbeitest) z.B. mit xampp (https://www.apachefriends.org/de/index.html) einen lokalen Server - oder natürlich direkt einen MariaDB-Server (https://mariadb.com/kb/en/inst…adb-windows-zip-packages/). Dann brauchst du erstmal kein Geld ausgeben und kannst alles über den localhost testen.

    Also anstelle einer Verbindung zu deinemCoolenServer.example verbindest du dich einfach per HTTP mit localhost/

    Werde mir die beiden links mal anschauen, danke.


    Wäre das von meinem verstädnis her den richtig einen Dedicadet Server zu benutzen?

  • Schwer zu sagen. Ich würde jetzt eher bezogen auf dein Puzzlespiel kein Dedicated Server nehmen, sondern Listen Server. Du Solltest dich damit aber ausführlich beschäftigen.


    Hier steht auch viel zu Networking: https://docs.unrealengine.com/…ces/Networking/index.html


    ich habe bisher immer an einen Dedicated Server gedacht weil ich nicht wollte das ein Spieler auf die Karten zugriff hat. Wenn ich das aber richtig verstehe macht das für Listen und Dedicated keinen Unterschied da diese Daten ja so oder so auf einer Database liegen müssen.

  • Genau, wo du das jetzt abfragst ich ziemlich Banane. Listen-Server sind natürlich für den End-User sehr angenehm, da er zum Hosten eines Spiels nicht eine eigene Anwendung starten muss, und das direkt im Spiel machen kann,

  • Genau, wo du das jetzt abfragst ich ziemlich Banane. Listen-Server sind natürlich für den End-User sehr angenehm, da er zum Hosten eines Spiels nicht eine eigene Anwendung starten muss, und das direkt im Spiel machen kann,

    Verstehe jetzt nicht was du damit meinst, inwiefern muss der User noch eine eigene Anwendung starten?

  • Das wäre nur der Fall, wenn du die Dedicated-Server zum Hosten durch den End-User freigeben würdest. Dann müsste der Host von einem Match ja sein Spiel als auch den Server starten.

    Falls du als Entwickler alle Server betreiben würdest, wäre das natürlich nicht so.

  • Der Dedicated-Server ist jetzt erstmal nur eine Version von deinem Spiel als Kommandozeilen-Tool, dass keine graphischen Assets beinhaltet. Der macht auch nichts anderes als eine Session zu erstellen, der Spieler beitreten können, genauso wie das bei einem Listen-Server passiert. Ob man das jetzt als Nutzer auf seinem eigenen Rechner hostet, als Nutzer auf einem gemieteten Server oder als Entwickler auf einem Server ist dabei egal.

    Das ist z.B. bei Spielen praktischen, die man zwar zusammenspielen kann, aber nicht muss. Minecraft als Beispiel. Dann kann man den Server laufen lassen, ohne selbst im Spiel zu sein. Oder man eröffnet in-game einfach einen Listen-Server.


    Wir bieten den Spielern immer Dedicated Server zum Download an, da es bei unserem Projekt durchaus Sinn ergeben kann. Bei einem Match-basierten Spiel würde ich den Sinn dahinter eher nicht sehen.

  • Dedicated-Server ergeben mehr Sinn, wenn es sich um Dauerspiele handelt, wie Minecraft oder MMORPG. Oder halt, wie freezernick schon schrieb, wenn du die Rechner mit schneller Verbindung zur Verfügung stellst, z.B. Call of Duty, Battlefield usw.


    Das was du meinst, einen Server bereitstellen, um quasi Cheaten zu vermeiden, zumindest verstehe ich dich da so, das kannst du mit beiden Servern lösen. Die Daten verschlüsselt übertragen und vom Client und Server auch jeweils die Plausibilität der Daten gegenchecken lassen. Wenn ich da mal eine Pokerrunde als Beispiel nehmen kann, es bringt keinem Spieler etwas sich vier Asse zu geben, wenn der Server aber weiß, dass er nur eine Dame als Highcard hat. Dann sind schon gezieltere Manupulationen die direkt auf den Server zugreifen notwendig, egal wer den Server hostet oder ob er als eigener Dedicated-Server irgendwo in der Ecke steht.

  • Du kannst dir (falls du mit Windows arbeitest) z.B. mit xampp (https://www.apachefriends.org/de/index.html) einen lokalen Server - oder natürlich direkt einen MariaDB-Server (https://mariadb.com/kb/en/inst…adb-windows-zip-packages/). Dann brauchst du erstmal kein Geld ausgeben und kannst alles über den localhost testen.

    Also anstelle einer Verbindung zu deinemCoolenServer.example verbindest du dich einfach per HTTP mit localhost/

    Habe mir jetzt mal dieses MariaDB angeschaut. Wie verbindet man das jetzt mit Ue4?


    Hab nach Ue4 MariaDB gegooglt,aber dazu keine treffer gefunden.

  • Unreal sollte, besonders wenn du Listen Server nutzt, nicht direkt mit der Datenbank verbunden werden. Das läd z.B. zu SQL Injection oder sonstigen Missbrauch ein. Außerdem solltest du MariaDB mit einem entsprechenden Datenbankuser und Rechten absichern und nicht den Root bzw. default User verwenden. Xampp ist was das angeht relativ unsicher bzw. nur für lokale Umgebungen geeignet.


    Das kannst du z.B. mit Hilfe eines Rest Service lösen. Ein Rest Service ist ein Webservice der in der Regel über HTTP läuft/kommuniziert und einen einheitlichen Zugriff auf die Datenbank bieten kannt. Du kannst einen Rest Service in C#, Java oder in Php realisieren, das bleibt dir überlassen. Unreal in Unreal schickst du dann ein HTTP Request an den Rest Service. Der Rest Service holt dann die Daten aus der Datenbank und schickt diese per HTTP zurück. Desweiteren würde ich eine Authentification und Authorization einbauen. Ein weiterer Vorteil eines Rest Service ist z.B. das auch Dienste oder Anwendungen diesen Benutzen können, z.B. eine Website.


    Grüße

  • Habe mir jetzt mal dieses MariaDB angeschaut. Wie verbindet man das jetzt mit Ue4?


    Hab nach Ue4 MariaDB gegooglt,aber dazu keine treffer gefunden.

    Genauso wie von Stephan beschriebn über HTTP-Requests lösen.
    Kannst das manuell in C++ oder über das VaRest-Plugin machen.

  • Genauso wie von Stephan beschriebn über HTTP-Requests lösen.
    Kannst das manuell in C++ oder über das VaRest-Plugin machen.

    Sorry wenn ich so dumm frage, aber wie funktioniert das?

    Die Datenbank mit MariaDB erstellen ist ja recht easy, ist ja wie eine CSV Datei.

    Aber wir verbinde ich jetzt das VaRest Plugin mit der MariaDB? Oder muss da jetzt noch ein anderes Programm zwischen?

  • Wie beschreibt man jetzt Http-Requests am besten? Ich glaube, am besten ist es zu beschreiben mit, ein Datenpaket, welches du an die IP und den Port der Datenbank schickst.


    Die bekannteste Datenbank ist da MySQL, für die du entsprechend viele Tutorials findest, aber die Meisten dieser Datenbanken funktionieren ähnlich, sind aber untereinander nicht immer kompatibel.


    https://mariadb.com/kb/en/mari…ale-23-rest-api-tutorial/

    https://mariadb.com/kb/en/8088/


    Also viel habe ich jetzt auf die Schnelle über die MariaDB nicht gefunden, aber bei einer gründlicheren Suche könnte man bestimmt noch mehr herausbekommen. Und vielleicht helfen dir diese beiden Links ja erstmal weiter.

  • Ich dachte VaRest benutzt man als HTTP-Request?

    Seltsam das man dazu nicht soviel findet, aber dann werde ich wohl lieber was anderes benutzen wozu ich mehr Tutorials finde.

    Ja also da kann ich dir nur MySQL empfehlen. Ist eben halt schon wegen des Zusammenhangs und häufigen Nutzung mit PHP und Webseiten halt sehr verbreitet. Dementsprechend gibt es dazu auch entsprechende Tutorials. Ob das jetzt mit UE zusammen genauso viel gibt, das weiß ich nun nicht. Denn ehrlich gesagt, ich hatte zu keinem Zeitpunkt irgendwie den Bedarf einer Datenbank im Spiel, was auch sehr selten der Fall sein dürfte.

  • Erstmal: MariaDB / MySQL ist im Prinzip das gleiche.

    Die HTTP-Requests machst du (bzw. kannst) über / mit VaRest.


    Den HTTP-Server / Enpoint müsstest du dir schon entweder selbst oder mit Hilfe von OSS basteln. Du musst die Requests ja auch authentifizieren, damit nicht jeder an deine Daten kommt.

    Ob der Server jetzt auf PHP, Python, NodeJS oder whatever ist dabei egal.