"Cloud"-Speicherung des Spielstandes

  • GM 8

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

  • "Cloud"-Speicherung des Spielstandes

    Ich möchte in meinem Singleplayer-RPG ein Speichersystem entwickeln, bei dem man am Anfang die Wahl hat, ob man lokal auf der Festplatte im Spieleordner (per verschlüsselter Speicherdatei) oder online speichern kann. Dadurch soll man den Spielstand mit jedem Computer abrufen können und eventuell später auch mit anderen Geräten (das steht aber noch in den Sternen...) Wenn man ein neues Online-Spiel beginnt, wird gibt man einen Spielnamen ("Username") und ein Passwort ein, ansonsten wird nichts benötigt. Diese Daten werden dann mit genau einem Spielstand verbunden. Der Spielstand kann dann damit auch wieder geladen werden und wird darin automatisch gespeichert und auch lokal im Temp- oder Spieleordner (wenn zum Zeitpunkt der Speicherung keine Internetverbindung hergestellt werden kann, wird inzwischen lokal gespeichert).

    Beim Laden soll natürlich zuerst die Internetverbindung geprüft werden. Ist sie erfolgreich, sollen die Daten vom Internet geladen und auch wieder gespeichert werden. Wenn das letzte Spiel offline gespeichert wurde (siehe weiter oben^^), sollen die lokalen Daten noch geuploadet werden. Schlägt sie aber fehl, sollen einfach die letzten (lokalen) Speicherdaten geladen werden, damit man auch offline ungehindert weiterspielen kann.

    Das letzte Feature wäre noch, dass man den lokalen Spielstand (die oben genannte Speicherdatei) mit den Cloud-Daten überschreiben kann, um den Spielstand nicht nur temporär, sondern immer auf dem Computer zu haben.

    Um euch nicht weiter zu verwirren, komm ich jetzt einfach zum Punkt: xD
    Ich suche die beste Online-Speichermethode, um das umzusetzen. Inzwischen kenne ich folgende Möglichkeiten:
    • FTP: wäre für mich eher einfach umzusetzen, weil ich einfach für jeden Benutzer vom Spiel eine Datei anlegen lassen könnte (z.B. *username*.cfg oder so ähnlich) und diese Datei im selben Format wäre wie die lokale Speicherdatei, was einen einfachen Export ermöglichen würde. Leider soll diese Methode sehr langsam, hackeranfällig und unsicher sein und noch mehr Nachteile haben. Deshalb möchte ich sie nicht unbedingt benutzen.
    • MySQL: die eigentlich empfohlene, schnelle Methode. Leider kenne ich mich mit MySQL und mit PHP überhaupt nicht aus und es wäre wahrscheinlich ziemlich aufwendig, das in der Datenbank gespeicherte Game in die lokale Speicherdatei umzuwandeln.

    Tut mir leid, dass ich so einen langen Text geschrieben hab, aber ich glaube, dass das wichtig ist, damit ihr versteht, was ich damit eigentlich will.
    Ich würde mich sehr darüber freuen, wenn ihr mir weitere Methoden nennen würdet, oder mit einen Tipp geben könntet, wie ich das umsetzen kann.

    Danke im Voraus :D
    ~SkaillZ
  • Wenn man ein neues Online-Spiel beginnt, wird gibt man einen Spielnamen
    ("Username") und ein Passwort ein, ansonsten wird nichts benötigt
    Du solltest noch die E-Mail abfragen, wenn jemand sein Passwort vergisst.
    FTP: wäre für mich eher einfach umzusetzen, weil ich einfach für jeden
    Benutzer vom Spiel eine Datei anlegen lassen könnte (z.B. *username*.cfg
    oder so ähnlich) und diese Datei im selben Format wäre wie die lokale
    Speicherdatei, was einen einfachen Export ermöglichen würde. Leider soll
    diese Methode sehr langsam, hackeranfällig und unsicher sein und noch
    mehr Nachteile haben. Deshalb möchte ich sie nicht unbedingt benutzen.
    FTP ist ein Plaintextprotokoll und sendet (wenn keine Verschlüsselung oder so benutzt wird) das Passwort im Klartext, das kann man abfangen und sich dann einloggen.

    Die dritte Methode ist HTTP und PHP zu benutzen, per einer HTTP DLL kannst du Daten hochladen die dann in einem PHP Skript bearbeitet werden können (Datei umbennen in richtigen NIck, prüfen ob der User überhaupt ein geloggt ist... etc)
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • henrik1235 schrieb:

    Wenn man ein neues Online-Spiel beginnt, wird gibt man einen Spielnamen
    ("Username") und ein Passwort ein, ansonsten wird nichts benötigt
    Du solltest noch die E-Mail abfragen, wenn jemand sein Passwort vergisst.
    FTP: wäre für mich eher einfach umzusetzen, weil ich einfach für jeden
    Benutzer vom Spiel eine Datei anlegen lassen könnte (z.B. *username*.cfg
    oder so ähnlich) und diese Datei im selben Format wäre wie die lokale
    Speicherdatei, was einen einfachen Export ermöglichen würde. Leider soll
    diese Methode sehr langsam, hackeranfällig und unsicher sein und noch
    mehr Nachteile haben. Deshalb möchte ich sie nicht unbedingt benutzen.
    FTP ist ein Plaintextprotokoll und sendet (wenn keine Verschlüsselung oder so benutzt wird) das Passwort im Klartext, das kann man abfangen und sich dann einloggen.

    Die dritte Methode ist HTTP und PHP zu benutzen, per einer HTTP DLL kannst du Daten hochladen die dann in einem PHP Skript bearbeitet werden können (Datei umbennen in richtigen NIck, prüfen ob der User überhaupt ein geloggt ist... etc)
    Ja, das mit der E-Mail wäre natürlich auch nicht schlecht, aber es soll auch kein klassisches Accountsystem werden, sondern man kann einfach einen Namen für den Spielstand eingeben, der mit einem Passwort geschützt wird, Persönliche Daten gibts hier sowieso nicht. Die Sicherheit ist also nicht sooooo besonders wichtig, weil das schlimmste, das passieren kann, wenn einer das Passwort hat ist, dass man den Spielstand verliert. Es ist mir aber trotzdem wichtig, dass nicht das ganze Spiel gehackt werden oder sämtliche Passwörter ausgehebelt werden können. Das mit der Verschlüsselung wäre für mich kein Problem, da wüsste ich schon, wie ich das machen kann. Ich werde auch das lokale Savefile verschlüsseln, um Savehacking zu verhindern.

    Deine Methode klingt sehr gut, aber leider habe ich wie schon erwähnt keine PHP Skills :/
    Wenn du aber ein Tutorial kennst, das zeigt wie man das angehen kann (ich meine damit kein allgemeines PHP Tutorial), würde ich mich sehr über einen Link freuen. Aber was ist denn eigentlich der Unterschied ob man das über HTTP oder FTP hochlädt?
  • SkaillZ schrieb:

    Aber was ist denn eigentlich der Unterschied ob man das über HTTP oder FTP hochlädt?


    FTP-Uploads sind Dateien. Du müsstes also mit den file_*-Funktionen des GM eine Datei erstellen und mittels FTP hochladen.

    HTTP sendet einen Request an den Server mit POST oder GET Variablen. Diese können dann zum Beispiel von einem PHP-Script verarbeitet werden.
    :thumbsup:
  • jlsnews schrieb:

    SkaillZ schrieb:

    Aber was ist denn eigentlich der Unterschied ob man das über HTTP oder FTP hochlädt?


    FTP-Uploads sind Dateien. Du müsstes also mit den file_*-Funktionen des GM eine Datei erstellen und mittels FTP hochladen.

    HTTP sendet einen Request an den Server mit POST oder GET Variablen. Diese können dann zum Beispiel von einem PHP-Script verarbeitet werden.
    Okay, ich verstehe, aber wie erwähnt kann ich kein php. :(
  • Dann hier mal ein Beispiel;

    [hide='Spielstand mittels game_save()/game_load() ']
    SPEICHERN

    GML-Quellcode

    1. var path,namer;
    2. // Kurz Variablen nutzen
    3. path = temp_directory+"\save-temp.sav";
    4. namer = "Name des Spielers";
    5. // Speichern
    6. game_save(path);
    7. // HTTP-Teil
    8. request = http_request_create();
    9. http_request_set_url(request,"http://.../script.php");
    10. // POST-Daten angeben.
    11. http_request_add_post_string(request,"name",namer);
    12. // Datei anhängen
    13. http_request_add_upload_file(request,"file","saved_"+name+".sav",path);
    14. // Ausführen
    15. http_request_perform(request);
    16. // Da "http_request_destroy" die Übertragung abbrechen würde,
    17. // muss gewartet werden.
    18. http_request_wait(request);
    19. // Testen
    20. if (http_request_get_successful(request))
    21. {
    22. if (string_count("1",string(http_request_get_buffer(request)) >= 1)
    23. {
    24. show_message("Speichern erfolgreich");
    25. }
    26. else
    27. {
    28. show_message("Fehler beim Speichern; der Server hat die Anfrage nicht korrekt ausgeführt!");
    29. }
    30. }
    31. else
    32. {
    33. show_message("Fehler beim Speichern; prüfen Sie Ihre Netzwerk-Verbindung!");
    34. }
    35. http_request_destroy(request);
    Alles anzeigen



    PHP-Quellcode

    1. <?php
    2. $name = $_POST["name"];
    3. $data = $_FILES["file"];
    4. $path = "save-dir/" . "saved_" . $name . ".sav";
    5. $dir = "save-dir";
    6. if (!file_exists($dir))
    7. {
    8. mkdir($dir,0644);
    9. }
    10. if (!move_uploaded_file($data["tmp_name"],$path))
    11. {
    12. echo "0";
    13. }
    14. else
    15. {
    16. echo "1";
    17. }
    18. ?>
    Alles anzeigen



    LADEN

    GML-Quellcode

    1. var path,namer,url;
    2. path = temp_direcotry+"\save-temp.sav";
    3. namer = "Name des Spielers";
    4. url = "http://meine-domain.de/DIR/save-dir/saved_"+namer+".sav";
    5. request = http_request_create();
    6. // Datei angeben, die heruntergeladen werden soll.
    7. http_request_set_url(request,url);
    8. http_request_set_file(request,path);
    9. http_request_perform(request);
    10. http_request_wait(request);
    11. if (http_request_get_successful(request))
    12. {
    13. game_load(path);
    14. show_message("Erfolgreich geladen!");
    15. }
    16. else
    17. {
    18. show_message("Fehler beim Laden; prüfen Sie Ihre Netzwerk-Verbindung!");
    19. }
    20. http_request_destroy(request);
    Alles anzeigen

    [/hide]

    Solltest du INI- oder Textdateien zum Speichern verwenden, lädst du einfach statt der erzeugten *.sav-Datei die INI- oder Textdatei hoch ;)




    Die Scripts sind ungetestet und nur mit minimalen Sicherheitsvorkehrungen erstellt. Jedliche Haftung wird abgewiesen!
    :thumbsup: