Multiplayer Server

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

    Ja das ich das irgendwie selber machen muss ist mir klar. Aber ich weiß nicht wie und auch nicht was ich da alles brauche.


    Gefühlt kommt jedes mal eine weitere Sache dazu. HTTP, php, json, mariaDB, etc.


    Ich habe keine ahnung wo ich da ansatzweise anfangen soll.

  • Naja ich muss ja schätze ich mal eine Datenbank benutzen oder? Um die Karten/Decks der Spieler irgendwo abzuspeichern, oder gibt es da noch einen anderen weg?

    Du könntest eine binäre Speicherdatei mit den freigespielten Karten erstellen. Online dann auf einem Server speichern. Das Problem bei beiden Systemen ist halt, also sowohl bei deiner Datenbank, als auch bei den Binärdateien, du musst den Server immer online halten.


    Ich weiß ja nicht wie dein Spiel genau aufgebaut ist, oder was genau es werden soll. Ich nehme mal an so eine Art GWENT. Aber GWENT speichert die Decks nicht online soweit ich weiß. Weder im Spiel the Witcher, noch Standalone. Sonst wären nach meiner Neuinstallation von Windows nicht alle erspielten Karten weg gewesen.

  • Du könntest eine binäre Speicherdatei mit den freigespielten Karten erstellen. Online dann auf einem Server speichern. Das Problem bei beiden Systemen ist halt, also sowohl bei deiner Datenbank, als auch bei den Binärdateien, du musst den Server immer online halten.


    Ich weiß ja nicht wie dein Spiel genau aufgebaut ist, oder was genau es werden soll. Ich nehme mal an so eine Art GWENT. Aber GWENT speichert die Decks nicht online soweit ich weiß. Weder im Spiel the Witcher, noch Standalone. Sonst wären nach meiner Neuinstallation von Windows nicht alle erspielten Karten weg gewesen.

    Mhmm das ist Komisch. Bei Haerthstone oder Magic ist das egal da kann man auch auf einem anderen PC spielen und hat alle freigeschalteten Karten.

  • Du könntest eine binäre Speicherdatei mit den freigespielten Karten erstellen. Online dann auf einem Server speichern. Das Problem bei beiden Systemen ist halt, also sowohl bei deiner Datenbank, als auch bei den Binärdateien, du musst den Server immer online halten.


    Ich weiß ja nicht wie dein Spiel genau aufgebaut ist, oder was genau es werden soll. Ich nehme mal an so eine Art GWENT. Aber GWENT speichert die Decks nicht online soweit ich weiß. Weder im Spiel the Witcher, noch Standalone. Sonst wären nach meiner Neuinstallation von Windows nicht alle erspielten Karten weg gewesen.

    Würden diese Binären Speicherdatein denn anders zugänglich als eine Datenbank?

  • Sonst wären nach meiner Neuinstallation von Windows nicht alle erspielten Karten weg gewesen.

    Es hat auch keine Steamcloud aktiviert...

    Sollte meiner Meinung nach, heutzutage eigentlich Standard sein sollte, wenn man ein Spiel schon auf Steam bringt, das hat man in ein paar Sekunden aktiviert.


    Ich habe keine ahnung wo ich da ansatzweise anfangen soll.

    Das einfachste ist immer noch, das ganze per SaveGame umzusetzen ^^


    Aber ja, ich weiß, jeder will alles so kompliziert wie möglich haben, am Besten noch mit Servern für Millionen von Spielern, selbst wenn man kein Geld dafür hat...

  • Nun, Binärdateien sind wirklich eher etwas für den lokalen Gebrauch. Bzw., wenn der Server selber diese erstellt und verwaltet.


    Zum Beispiel Ultima Online, ist ja schon ein klein wenig in die Tage gekommen das Spiel, hat eben halt auf dem Server entsprechende Flagdatein verwaltet, ähnlich wie *.ini-Dateien. Und die enthaltenen Werte dann halt an den Client geschickt. Zumindest war das so bei einigen nachgebauten Serverprojekten der Fall. Aber ob du nun eine *.ini-Datei benutzt, deren Vorteil ja in der Unterteilbarkeit liegt, eine Datenbank, oder ob du dir ein eigenes Dateiformat als Binärdatei erstellst, macht eigentlich irgendwann kaum noch einen Unterschied, je nach Aufwand der anfallenden Daten versteht sich.


    Vorteil Datenbank:

    - Durch HTTP-Requests sehr universal einsetzbar. Es gibt viele Tutorials usw., leicht erweiterbar.

    Nachteil:

    - Wenn du nicht injections abfängst, kann sie relativ leicht gehackt werden. Wobei ich jetzt nicht weiß, ob dieses Problem bei neueren Datenbanken vielleicht auch so schon ausgeschlossen wird. Ist schon ein paar Jahre her wo ich mit Datenbanken hantiert habe, bin da also nicht auf dem neuesten Stand.


    Vorteil INI-Datei:

    - Leicht lesbar, in Kategorien einteilbar, ebenfalls ein Standard, leicht erweiterbar

    Nachteil:

    - Wenn es jemand schaffen sollte deinen Server zu hacken wird er gar keine Probleme haben an diesen Dateien Änderungen vorzunehmen.


    Vorteil Binärdatei:

    - Du bist nicht abhängig von irgendwelchen Standards, du kannst dein eigenes Dateiformat entwickeln und beliebig erweitern. Dadurch das es kein Standard ist weniger einfach manipulierbar (Aber nicht unmöglich).

    Nachteil:

    - Aufwand relativ hoch, nicht leicht erweiterbar ohne an Abwärtskompatibilität zu verlieren.

  • Es geht mir nicht darum es kompliziert zu machen sondern so das man nicht so eben mal schummeln kann. Wenn es einfache, sichere Art gibt das zumachen dann her damit.

  • 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?


    Also du musst zwei Dinge unterscheiden.

    In-Game:

    UE4 nutzt ein Authorative Server Networking. D.h. der Server hat immer recht, die Clients versuchen den Zustand auf dem Server nachzustellen. D.h. solange die kritische Gameplay Logik auf dem Server Läuft ist erstmal alles ok. Cheaten geht natürlich immer.


    Out-Game:

    Du willst ja dass die Decks der Spieler irgendwie gespeichert werden, aber nicht auf dem Rechner des Spielers. Von daher musst du noch einen Service Programmieren, welcher die Decks Speichern kann und eine Schnittstelle hat, mit der der Server, sowie die Clients (z.B. im Deck Building Menü) reden kann. Das musst du außerhalb von UE4 machen, z.B. dann über ein System aus Datenbanken (SQL, MongoDB, oder was auch immer du willst) und einen Applikations Server (z.B. über verschiedene node.js basierte Pakete, Wildfly, Springboot, oder gar Apache2+PHP). Da musst du natürlich irgendwie die kommunikation mit den Datenbanken, Kommunikation mit Clients (REST oder Websockets), Authentifizierung, etc machen.

    Generell ist es hier gut sich an Standards zu halten, dann kannst du z.B. den selben Service auch für eine Webseite nutzen.


    Meine Empfehlung. Mach erstmal den ersten Teil, damit du zuerst mal UE4 verstehst. Du musst nichts an der Engine Ändern, solange du einen Editor Build hast kannst du einen Dedicated Server über den Editor Starten bzw. auch über Command Line. Die Tutorials die du dafür siehst, sind eher für einen reinen Dedicated Server Build, der nichts anderes kann.

    Auch ein Listen Server ist meistens ok für Test Zwecke.

  • sondern so das man nicht so eben mal schummeln kann.

    Savegames zu knacken ist nicht gerade einfach, da alles verschlüsselt ist ^^


    Hier mal ein Ausschnitt des Codes meines Savegames vom letzten Spiel:


    Um es noch sicherer zu machen, könntest alles in Strings speichern, denke damit wird es nahezu unhackbar ^^

    Evtl. auch ein paar Checks einbauen, die in verschiedenen Zeilen liegen (oder sogar in verschiedenen Savegames) und keiner kanns mehr knacken, hehe



    Ich würde es erstmal mit dem einfachsten und billigsten Weg versuchen, wenn es nicht reicht, kannst dich immer noch mit mehr auseinander setzen.