Archivator: DLL zum speichern von Variablen und Dateien + UNIVERSALSKRIPT - System

    • Dll

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

    • Archivator: DLL zum speichern von Variablen und Dateien + UNIVERSALSKRIPT - System

      Guten Tag, Community

      hier mit stelle ich eine DLL vor, den "Archivator".
      Die DLL bietet die Möglichkeit String, Zahlen sowie Dateien in eine Datei (optional verschlüsselt) abzuspeichern.

      Debei kann man wählen ob man etwas in den Header speichert oder ind en Archiv-Teil.
      Ersterer hat den Vorteil dass er sehr schnell ausgelesen werden kann. Darin sollten also z.B. die Daten abgespeichert werden die man in einem eigenen Dateimanager sehen will, drin stehen (ich gehe jetzt hier mal von einem professioneller gestaltetem Spiel aus). Nachteil ist dass man zwingend in der selben Reihenfolge auslesen muss, wie man reingeschrieben hat (First-in-First-out - Prinzip).

      Wird dann die Datei benutzt um z.B. eine Karte zu laden, greift man auf den Archiv-Teil zurück.
      Dieser basiert auf einem Schlüssel-Wert-Paar - Prinzip.
      D.h. man gibt seine Daten einen namen anhand dessen man die Daten in beliebiger Reihenfolge wieder abrufen kann.

      Im Beispiel wird alles übrige erklärt.
      Falls noch Fragen, Bugs auftreten, oder Anregungen da sind, bitte immer raus damit :)


      EDIT: UPDATE!

      Eine neue Version wurde grade hochgeladen.
      Die DLL an sich ist die selbe.
      Hinzu sind aber einige neue GML-scripte hinzugekommen die jeweils mit ar_ext_ beginnen.

      Diese sollen das Verwalten eines eigenen Datei-Typs erheblich zu vereinfachen.
      Die Idee ist dass man keine zwei getrennten Skripte mehr zum Speichern und zum Laden von Daten braucht.

      Stattdessen ruft man die selbe(n) Funktion(en) auf und es wird nur beim öffnen der Datei unterschieden ob gespeichert oder geladen wird.
      Außerdem muss man der Funktion nur ein mal den Vriabel-NAMEN übergeben.
      Das sieht dann zum Beispiel so aus:

      GML-Quellcode

      1. ar_ext_str("just_a_string");
      2. ar_ext_val("a_real");


      Wenn grade gespeichert wird:
      liest das System den Wert/string ind er Variable aus und speichert ihn ab.

      Und wenn grade geladen wird:
      Liest das System den Wert/String aus der Datei und setzt ihn in die übergebene variable ein.

      Dazu sei gesagt: Ja, das ist bei weitem nicht die efektivste Methode die man im Game Maker verwenden kann da sie offensichtlich mehrere Aufrufe von execute_string benötigt.
      Allerdings merkt man das so gut wie niemals - ich für meinen Teil bevorzuge die Bequemlichkeit und Erweiterbarkeit (sowie geringeres Risiko sich zu vertippen).
      Auf Ladezeiten von mehreren Sekunden bishin zu einer Minute die einem manch ein professioneller Titel zumutet, kommt man damit außerdem auch nicht - sofern man nicht Mist baut... 1000e Variablen sollte man so oder so nicht direkt einspeichern.

      Stattdessen sollte man Datenstrukturen verwenden wo es geht und genau dafür gibt es auch ar_ext_... Funktionen.
      Es können ds_... abgespeichert werden sowie Arrays und sogar Surfaces und Sprites die zur Laufzeit hinzugefügt wurden!

      Die neue Datei (diesmal auf Englisch kommentiert) könnt ihr hier runterladen. Leider funktioniert der ar_ext-Teil nicht im GM:Studio. Der Rest aber weiterhin schon.
      Dateien

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von DragonGamer ()

    • kebaplover schrieb:

      Finde ich ganz interresant, alerdings verstehe ich den Sinn dahinter nicht, warum nur der Archiv - Teil mit einem Passwort versehen werden kann.
      Das liegt daran wie das System funktioniert (es wird nicht einfach die Datei evrschlüsselt). Man hätte es natürlich auch anders machen können, aber eigentlich ist die Verschlüsselung doch sowieso mehr oder weniger überflüssig.

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • andre111 schrieb:

      Du benötigst kein execute_string, da du für Variablen auch variable_local_... nutzen kannst
      Stimmt, allerdings würde der Geschwindigkeits-Unterschied kaum auffallen und ich habe execute_string genommen weil man damit sowohl globale als auch lokale Variablen verwenden kann... sonst müsste man alle Funktionen doppelt machen.

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)