[Multiplayer / MMORPG] - Spielwerte speichern

  • GM 8

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

  • [Multiplayer / MMORPG] - Spielwerte speichern

    Hey Community,

    da ich zur Zeit an einem MMORPG arbeite, habe ich mir heute folgende Frage gestellt.

    Wie bzw wo speichere ich wichtige Spielwerte?


    Mein derzeitiger Vorschlag wäre eine MySQL Datenbank in folgendem Ablauf:
    MySQL Server <-> Game Server <-> Spieler


    Vorteile:
    - Leichteres Manipulieren / Einsehen von außen
    - Web API (!!)
    - einfache Backup Lösungen

    Nachteile:
    - Der Zugriff wird etwas länger dauern


    Wie würdet Ihr die Speicherung der Multiplayer-Werte lösen?

    Cheers
  • Eine SQL-Datenbank für ein Auslagern der Daten ist vermutlich okay, sollte aber auf einem weiteren Server laufen.

    Alle "aktiven" Daten (Lebenspunkte aktiver Spielfiguren, Positionen, ...) sollten aber im RAM des Servers liegen - alles anderes wäre zu langsam, da schon für jede Schadensberechnung diverse Datenbankanfragen gemacht werden müssten. Da wäre es schon ätzend, wenn der Server pagen müsste (sprich Festplattenzugriff).

    Ferner brauchst du ein gutes Konzept für was der Client macht und was der Server. Bei WoW z.B. ist nur die Bewegung des Spielers und eine Schätzung von Cooldowns clientseitig, alles andere regelt der Server.


    Alles in Allem sehe ich dich aber nicht in der Lage, sowas auf die Beine zu stellen, sowas ist einfach zu groß. Sorry.
  • Ich würde auf dem Server .ini-Dateien mit den Werten erstellen, der Server kann die auslesen und direkt an den Client senden!
    Jap.
    Halte ich für so ein Projekt nicht angebracht aber sollte man doch kurz drauf eingehen, warum.
    Ist meiner Meinung nach ressourcenlastig und auch nicht schneller als eine RAM Berechnung.

    Also bleibt das Optimum bei einer RAM / Datenbank Lösung.
  • Wenn dir das so klar ist, verstehe ich nicht, warum die Frage stellst...
    Schneller als RAM geht nunmal nicht und für die langzeitige Speicherung kommt nur eine gut strukturierte Datenebank in Frage, damit schneller Zugriff und kollisionsfreie Ablage gewährleistet ist.
    Eine SQL-Datenbank ist da bestimmt nicht die beste, geschweige denn einzige Wahl, aber mit Sicherheit die praktikabelste.
  • Hab einen FreeBSD Rootserver, auf dem ein MySQL Server läuft - Deswegen diese Wahl.
    Die Datenbank wäre in der 3. Normalform.

    Ein kurzer check beim Start / Ende des Spiels, Truhen, Banken usw sollen darüber gehandelt werden.
    Inventar wird auch beim Beenden gespeichert für die Web API.

    Der Plan ist ein Server in C# für das Spiel zu schreiben, damit ich meinen Rootserver weiter nutzen kann.

    Wusste halt nur nich, ob das das Non-Plus-Ultra ist.
  • Meine Datenbankenkenntnisse sind grad nicht wirklich frisch, aber 3. Normalform ist evtl. zuviel des Guten - eine gewisse Redundanz kann sich durchaus bezahlt machen (komplexere SQL-Statements sind kostspielig), insbesondere wenn du eine Web-API planst.

    C# dürfte schnell genug sein. Schneller als etwas, was du mit dem GM schreibst auf jeden Fall. Dank der Laufzeitoptimierung kann es sogar sein, dass es z.B. C++ in nicht viel nachsteht. Aber dazu kann ich nicht viel sagen.
    Die Kommunikation mit den Clients muss halt klappen und das ist auch, neben der Planung und den üblichen Schwierigkeiten ein Spiel zu designen, vermutlich die größte Herausforderung an einem kleinen MMO.

    Bestimmtes NPC-Verhalten solltest du ferner über Python- oder Lua-Scripte auslagern - so kannst du den Server auch während des Betriebs patchen. Das darfst du natürlich aber auch nicht übertreiben, denn jedes Script würde von der Festplatte gelesen werden und das solltest du gering halten.
  • Ich denke, dass bei meinem geplanten Ausma Python- & Lua-Scripte nicht nötig sind.
    Klar sind sie schnell - Aber da müsste ich mich erst wieder einlesen. Hatte erst einmal mit Lua zu tun und da hab ich ein Entpacker geschrieben :P

    C# kommt mittlerweile definitiv an c++ ran! Für meine geplante Größe langts ;)

    Hmm sind Joins so mehr zeitaufwendig, dass ich eine Redundanz eingehen sollte?
  • Naja, für jeden kleinen Fix alle vom Server schmeißen zu müssen ist hart... Und Lua ist echt nicht schwer, das ist einer Stunde gelernt.

    Wie gesagt, mein Wissen ist nicht frisch. Ein stinknormaler Join dürfte recht billig sein, aber Schnitt- und Komplementärmengen dürften schon eine Ecke aufwendiger sein.
    Einfaches Beispiel, wo Redundanz vielleicht sinnvoll wäre: Die Webdarstellung von Charakteren. Anstatt jetzt für jeden Webseitenaufruf die Spieler-, Gildennamen-, Item-, ...-tabellen zu joinen, könnte direkt eine Tabelle vorbereitet werden, die all diese Infos bereits enthält.