Hilfe mit RPG Servern à la Diablo 2

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hilfe mit RPG Servern à la Diablo 2

    Hallo zusammen,

    vorab ich bin recht neu in der Gamedev Szene. Ich sammle nun seit ca 1 1/2 Jahren Erfahrungen im Blueprint bereich der Unreal Engine. Davor habe ich ca. 1 Jahr mit Unity herum experimentiert und dort meine ersten Socket erfahrungen im Bereich C# gemacht.

    So nun zu meinem eigentlichen Thema:

    Ich und mein Bruder würden gern ein kleines Spiel (wohl eher ein Level) erstellen was an das gute alte Diablo 2 anlehnt, sprich Top-Down-Hack'n'Slay... Allerdings vom Lobbysystem her hätten wir gern ein paar kleine Änderungen. Sprich alle Charaktere sollten möglichst zentral auf einem Server gespeichert werden (hierfür würden wir gern MySQL benutzen). Es sollte eine Art online zwang geben, um cheaten zu vermeiden, sprich kein LAN oder Singeplayer... Bloß der reine Mutliplayer. Die art von Lobby soll ziemlich ähnlich der von Diablo 2 sein, sprich nach dem man sich eingeloggt hat, seinen Charakter ausgewählt hat wird man nun auf ein Lobbylevel weitergeleitet und dort sollten Dinge wie: Chat, existierende Spiele und die Möglichkeit eigene Games zu erstellen vorhanden sein. Allerdings wollen wir nicht das der Spieler selbst hostet, sondern immernoch der Server. Der Spieler soll demnach eine Instanz des Spiels auf dem Server starten können (dies soll dazu dienen um cheaten weitesgehend zu vermeiden).
    Nun zum eigentlichen Spiel, es soll, wie bereits erwähnt, ein Hack'n'Slay à la Diablo 2 werden. Es muss nicht sehr ausgereift sein geschweige denn groß, ein einzelnes Level würde uns vollkommen genügen an dem wir herumexperimentieren können.

    Leider habe ich dazu nach stundenlangem googlen wenig gescheite Informationen gefunden wie ich diese Thematik mit der Unreal Engine 4 angehen kann. Oft sind die tutorials auf Shooter games oder rundenbasierte Spiele zugeschnitten. Und alles andere was man findet ist meist die Frage nach MMO Server Architekturen, die (wenn sie nicht gleich alle wieder davon abraten) auch nur themathisch erklären wie so etwas zustande kommt. Das ist meist auch sehr hilfreich, aber dazu macht man sich ja meist selbst Gedanken im voraus.

    Nun meine Frage, hat jemand Interesse mir bei dieser Thematik Hilfestellung zu leisten und mir evtl. bei den Anfängen etwas unter die Arme greifen mag? Ich bin wie gesagt kein großer Programmierer, habe wenig bis keine Erfahrungen mit C++ und bloß mittlere Erfahrungen mit C#... Dennoch bin ich hoch interessiert an solchen Server Frameworks, habe aber leider keine Vorstellung wie man so etwas in der Praxis umsetzt.

    Über jegliche Hilfe würde ich mich sehr freuen!

    Anmerkung: Es muss nicht das stabilste und sicherste System sein, ein einfaches und schlichtes System, was überhaupt erstmal funktioniert, sprich ich kann mich auf einem Loginserver einloggen und der leitet mich weiter an einen Gameserver der gewisse Attribute bzw Daten aus einer DB lädt wäre schon der Himmel auf Erden für mich.

    Danke im voraus! :D
  • Hmm eigentlich sehr Simpel, gibt paar Wege dafür, aber..
    Als aller erstes solltest du mal einen Dedicated Server aufsetzen:
    wiki.unrealengine.com/Dedicate…_Guide_(Windows_%26_Linux)

    Dann mit Rest bzw dem VaRest Plugin auseinander setzen, dadurch bekommst du die Möglichkeit einen simplen login server in php zu basteln und auch easy mysql zu verwenden..
    Versuch dich aber lieber erstmal an der Replication von Game Stuff selbst, bevor du einen Login Server machst oder was Speichern möchtest^^
  • Das habe ich schon durchgearbeitet.. Hatte hier und da ein paar kleine Fehler aber unterm strich lief es, verstehe nur nicht wie es danach weiter geht... Programmiere ich jetzt quasi auf Basis von Blueprints den Client und den Server unter der selben Oberfläche(UE4)?

    Da habe ich auch noch die frage, wie lade ich jetzt z.b. den Spawn eines gegners aus einer DB? Oder z.b. die Werte einer Waffe?

    Und bräuchte ich im Endeffekt nicht eine Art Masterserver? Der quasi spieleinstanzen zu und abschalten kann? Weil sagen wir mal ich wäre der erste Nutzer der sich einloggt, sprich kein Spiel ist offen, also dürfte ja bis dahin kein Server existieren, erst sobald der erste Nutzer ein Spiel erstellt... Dieses Spiel soll ja dann auch in einer Liste auftauchen und wieder verschwinden wenn kein Nutzer mehr im Spiel ist... Wie bei D2 halt ^^
  • Sofern du den Unreal Dedicated verwenden möchtest, Ja! Natürlich kannst du einen eigenen Server schreiben, aber dann wäre das Fragen nicht nötig, denn dann
    weißt du sehr genau was du da tust. Ich kenne deine Architektur/Plan nicht daher ist das nicht so einfach bzw ist es generell nicht.

    Eigentlich ist das ein MMO System das du möchtest. Ich denke du solltest ein kleines C->C System besser machen für die Anzahl von zwei Spielern ein Dedicated System?

    Der Unreal Server ist sehr einfach Instanzierbar bis zu 512x glaube? (Korregiert mich wer wenn falsch ich falsch liege?) Port:7777 (Standard), 7778, 7779...
    Mit Master Server ja gut Matchlogik.. Das muss man echt genau durch denken..

    Vielleicht mal mit einem extern Socket wie nen Chat Anfangen, wenn es dir nur ums lernen dabei geht.
    Ich denke aber aus dem steh greif kann jetzt keiner eine Solution dafür finden oder basteln^^
  • Ja, du brauchst den Masterserver.
    Du musst dir vorstellen das dein Spiel Daten ausliest und senden wie dein Webbrowser. So wie ich jetzt deinen Post abgerufen habe und meinen hier jetzt gleich absende. Genau so kannst du das mit den Daten deines Spiels machen. Läuft hier auch mit PHP und mysql.

    Wie willst du damit eigentlich Cheats verhindern? Du könntest Spieler bannen aber dazu musst du die Cheats ja erst erkennen. Außerdem schreibst du nur von dir und deinem Bruder. Wer von euch will cheaten? :D

    Je nachdem wie eilig du es hast, ich baue ein UE4 Plugin mit dem das möglich sein wird. Dauert aber noch.
    Meine UE4 Plugins gibt es hier.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Socke ()

  • Wir wollten das Spiel(bzw. Level) zu 2 entwickeln oder zumindest damit anfangen.

    Man hat ja eine "Endvorstellung" auf die man hinarbeitet, sonst könnte ich theorethisch das ganze auch schlicht auf Singleplayer beschränken und schauen das ich am Ende einfach eine LAN Funktion reinbekomme...

    Aber das ist nicht was wir lernen wollen bzw. woran wir arbeiten möchten.

    Wir würden eben gern ein Diablo artiges Hack'n'Slay haben wo sagen wir mal als Beispiel 5 Spieler gleichzeitig in der Welt rumlaufen können, zusammen Monster schlachten können oder Dungeons betreten können oder was auch immer.

    Ich denke mir es ist schon eine Cheatprevention dadurch, das die Spiele auf dem Server laufen und eben nicht Lokal wie es bei einem Listen Server der Fall wäre. Somal dazu auch noch sämtliche Spielrelevanten Daten in einer Datenbank liegen und somit niemals auf dem Client direkt, um das ganze vor Manipulation zu schützen... Wie gesagt bin noch totaler Anfänger ^^ das sind so meine Gedanken zu dem Thema...

    Ich denke einen eigenen Server zu schreiben wäre eine Mammut Aufgabe der ich derzeit nicht gewachsen bin... Würde daher die sagen wir mal "einfachste" Lösung, um mein Vorhaben umzusetzen, bevorzugen.

    Stehe aber bei dem UE4 dedicated Server etwas auf dem Schlauch... Blicke trotz der ganzen tuts nicht ganz durch wie ich jetzt das Spiel weiter bauen kann... Ich mein wie und woher weiß es denn was das Spiel übernehmen soll? Und welche funktionien nicht im Spiel vorhanden sein dürfen?

    Ich weiß das ich Events Serverseitig oder Clientseitig laufen lassen kann und das ich Variablen replizieren kann... Aber nehmen wir z.B. EventBeginPlay... woher weiß welche Komponente nun wozu dies gehört?

    Bitte entschuldig falls ich unerfahrene (um nicht zu sagen dumme :D) Fragen stelle

    Edit: Das ist derzeit meine "beste" Quelle cedric-neukirchen.net/Download…Cedric_eXi_Neukirchen.pdf
  • Pakutan schrieb:

    Ich weiß das ich Events Serverseitig oder Clientseitig laufen lassen kann und das ich Variablen replizieren kann... Aber nehmen wir z.B. EventBeginPlay... woher weiß welche Komponente nun wozu dies gehört
    Bin mir nicht sicher ob ich die frage richtig verstanden habe. Hilft das hier?
    docs.unrealengine.com/en-US/Re…ntExamples/Networking/1_2

    Alles was im Spiel in Echtzeit übertragen werden soll wie z. B. die Bewegung des Spielers machst du mit den Events die du erwähnt hast.

    Wenn du Daten persistent auf einem Masterserver speichern willst musst du das selbst programmieren. Kannst teilweise Plugins dazu nutzen falls du keine kostenlosen findest oder kein Geld ausgeben willst musst du dich wohl in c++ einarbeiten.
    Damit würde es gehen. wiki.unrealengine.com/Http-requests Mit SSL sogar sicher.
    Meine UE4 Plugins gibt es hier.
  • Das ist schon mal ein guter Ansatz! Danke dir.

    Die meisten dieser Videos wie man einen dedicated Server mit UE4 erstellt zeigen eben wie man eines der vorhanden Templates kurzer Hand in ein Multiplayer Spiel mit eben einem dediziertem Server macht. Aber leider zeigen sie nicht wie man nun Inhalt und Logik einfügt. ?(

    Doch wie geht es danach weiter ist meine Frage? Wie baue ich den Server nun weiter? Wie baue ich das Spiel weiter?

    Ich suche quasi nach Tutorials die das hinter sich haben und ein wenig mehr in die tiefe gehen... Bin schon ab von dem Gedanken das ich was bezüglich Datenbanken finden werde... Da ich bereits stundenlang danach gesucht habe aber nichts entsprechendes gefunden habe...

    Gibt es da auch was zu? Ich meine die Epic Games Reihe bezüglich Networking ist schon mal sehr viel Wert, für mich aber noch zu weit entfernt als das ich dort so einfach einsteigen kann und das auf mein Projekt anwenden kann :S

    Andere Frage: Ich erstelle den UE4 dedicated Server (der mir scheint der einfachste Weg zu sein) ja innerhalb meines bereits angefangen Projektes, bedeuted das, dass ich quasi Server Code und Client Code mehr oder weniger im selben Projekt habe? Z.B. in meinem TopDownCharacter(BP), wo solche Dinge wie 'Get position of Mouse in World' stehen würden dann auch Serverseitige Funktionen stehen? (Falls nötig)
  • Das ist bei den Grundsätzlichen Sachen wie Bewegungen recht einfach bei UE4. Vielleicht findest du es deswegen nicht. Wenn du ein 3D Objekt erstellst und es ins Level einfügst machst du in den Eigenschaften ein Häkchen bei Replicated. Wenn jetzt einer das Object bewegt wird es automatisch an den Server übertragen und der Server überträgt das an alle Spieler.

    Wenn du jetzt einen Wert also eine Variable an alle Spieler schicken willst dann machst du das mit den Custom Events. Spieler A löst ein "on Server" Event aus. In diesem Event ist die Variable und sie wird demnach auf dem Server übertragen. Auf dem Server machst du wieder so ein Event. Dieses Mal ein Multicast Event mit dieser Variable. Das Multicast Event wird bei allen Spielern ausgelöst (vorsicht, auch auf deinem). Damit ist deine Variable bei allen angekommen. Das ist aber recht unsicher. Client -> Custom Event on Server -> Server -> Custom Event Multicast -> Alle Clients.

    Die Kollisionsabfrage läuft auf dem Server und den Clients. Wenn jetzt ein Spieler einen Gegenstand berührt (über ein Item gelaufen) wird ein Event ausgelöst. Du fängst dieses Event ab. Möglichst auf dem Server (siehe Switch Has Authority). Jetzt kannst du das mit dem Multicast Event an alle Clients schicken um etwas anzuzeigen oder so. Du kannst auch eine Variable setzten und auf dem Server lassen. Die ist aber auf nur auf einem Server und nur im RAM.

    Du kannst auch Variablen auf Replicated setzten. Das ist aber ausschließlich Server -> Client und nicht andersrum möglich.

    Wie gesagt, das mit der Datenbank und dem Masterserver läuft außerhalb UE4 und muss selber implementiert werden.
    Meine UE4 Plugins gibt es hier.
  • Danke, das hat mir bereits sehr geholfen!

    Ich denke ich weiß nun wie ich weiter voran gehen kann. Werde mir dazu noch diese youtube.com/watch?v=hUEXdt3wIT…YsOgFmbwukjKppPI_Q7E89jTK Videoreihe zur Hand nehmen und sehen wie weit ich damit erstmal komme.

    Also verstehe ich das richtig, wenn ich nun mein Spiel einfach so weiter "bastle" mit Switch Authority und Replication, muss ich jedes mal nach Veränderungen zurück in VS und meinen Server neu kompilieren? Damit auch dieser weiß welche Veränderungen ich am Spiel vorgenommen habe und er die Logik übernimmt?
  • Falls du mit "Server neu Kompilieren" die ganze Engine kompilieren meinst dann nein. Blueprints laufen "AUF" der Engine. Vergleichbar mit einer .png Datei "AUF" MS Paint.

    Falls du damit "Dein Spiel/Projekt" meinst dann ja. Client und Server müssen identisch sein. Das gilt sogar für die Änderung einer Textur. Mann kann das über C++ austricksen. Gibt dann aber ein Absturz wenn die Spiellogik sich unterscheidet. An der Grafik kann man dann aber rumfummeln ohne den Server neu zu kompilieren.
    Meine UE4 Plugins gibt es hier.
Unreal®, Unreal Engine, the circle-U logo and the Powered by Unreal Engine logo are trademarks or registered trademarks of Epic Games, Inc. in the United States and elsewhere.