Savegames mit Selbstgewählten Namen, welche Variablen beeinhalten

  • GM 7
  • Savegames mit Selbstgewählten Namen, welche Variablen beeinhalten

    Hey Community...
    Ich wollte mal fragen ob ihr mir ein Tipp geben könnt, wie ich das machen kann das wenn ich nen Knopf klicke, das der dann ein Menü öffnet, wo ich den Name des Savegames reinschreibe. dieses Savegame bräuchte nur Variablen. Allerdings sollte man dieses Save nicht einfach mit Editor öffnen und bearbeiten können :S Und wenn man dann auf Load klickt, sollte wieder so ein Menü kommen wo man gespeicherte Saves dann auswählen und laden kann.
    Dann sollten natürlich wieder die vorher gespeicherten Variablen den Gespeicherten wert Zurückerhalten.

    Ich habe es schon mit einen GM Addon versucht, welches mehr Drag'n'Drop funktionen bietet, allerdings gibt die erweiterte Save funktion immer wieder einen Error raus. Daher wird es wohl nicht ganz so leicht sein auf solch eine Art zu speichern... Denke ich mal...

    Ist das irgentwie möglich oder seit ihr da auch überfordert??

    Bitte um Antwort bzw Hilfe
    MfG Marvin159

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

  • Du könntest sowas machen:

    GML-Quellcode

    1. var f;
    2. f = file_text_open_write(get_integer('Name:','Save'))//textdatei öffnen
    3. file_text_write_real(f,/*deine Variable*/)//eine zahl in die datei schreiben
    4. file_text_writeln()//nächste zeile
    5. //usw.
    6. file_text_close(f)

    so könntest dus speichern. zum laden dann folgende funktionen benutzen:

    GML-Quellcode

    1. file_text_open_read
    2. file_text_read_real
    3. file_text_readln


    und damit man die zahlen nicht so einfach ändern kann:

    deineVariable*9/7+36 zum speichern(die zahlen sind eigentlich egal)
    und dann zum laden wieder zurück:
    (dieGeleseneZahl-36)*7/9

    Mfg alron

    Edit: mir ist gerade in den sinn gekommen, dass man glaub ich auch schreibgeschützte dateien schreiben kann(bin mir nicht sicher)

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

  • Alron schrieb:

    Du könntest sowas machen:

    GML-Quellcode

    1. var f;
    2. f = file_text_open_write(get_integer('Name:','Save'))//textdatei öffnen
    3. file_text_write_real(f,/*deine Variable*/)//eine zahl in die datei schreiben
    4. file_text_writeln()//nächste zeile
    5. //usw.
    6. file_text_close(f)

    so könntest dus speichern. zum laden dann folgende funktionen benutzen:

    GML-Quellcode

    1. file_text_open_read
    2. file_text_read_real
    3. file_text_readln


    und damit man die zahlen nicht so einfach ändern kann:

    deineVariable*9/7+36 zum speichern(die zahlen sind eigentlich egal)
    und dann zum laden wieder zurück:
    (dieGeleseneZahl-36)*7/9

    Mfg alron

    Edit: mir ist gerade in den sinn gekommen, dass man glaub ich auch schreibgeschützte dateien schreiben kann(bin mir nicht sicher)
    Sorry, aber ich verstehe das Speichern nicht ganz... wenn ich jetzt z.b. 5 Variablen habe welche global.unlock1,global.unlock2,... heißen und diese einen wert von 1 haben gespeichert werden sollen, dann muss ich

    GML-Quellcode

    1. var f;
    2. f = file_text_open_write(get_integer('Name:','Save'))//Was genau ist Name: und Save? Name der Dateiname? und was ist dann Save? bitte um Hilfe :S
    3. file_text_write_real(f,global.unlock1=1)
    4. file_text_writeln()
    5. file_text_write_real(f,global.unlock2=1)
    6. file_text_writeln()
    7. file_text_close(f)


    reinschreiben?
  • ah, das ist ein fehler von mir. es sollte heissen get_string(text,voreingestellter text). die funktion macht ein pop-up fenster auf, in dem nach einem string gefragt wird.
    Und dieser string ist dann der dateiname. die datei wird in dem ordner erstellt, in dem das spiel sich befindet.
    der rest ist fast richtig, nur musst du schreiben:

    GML-Quellcode

    1. file_text_write_real(f,global.unlock1)

    so wird der wert von global.unlock1 wird in die datei geschrieben, also wenn die variable 0 ist, dann schreibt es 0 in die datei, wen die variabe 1 ist, dann wird 1 hinengeschrieben usw.

    und dann hab ich noch einen fehler gemacht. es sollte heissen:

    GML-Quellcode

    1. file_text_writeln(f)


    MfG Alron
  • Alron schrieb:

    ah, das ist ein fehler von mir. es sollte heissen get_string(text,voreingestellter text). die funktion macht ein pop-up fenster auf, in dem nach einem string gefragt wird.
    Und dieser string ist dann der dateiname. die datei wird in dem ordner erstellt, in dem das spiel sich befindet.
    der rest ist fast richtig, nur musst du schreiben:

    GML-Quellcode

    1. file_text_write_real(f,global.unlock1)

    so wird der wert von global.unlock1 wird in die datei geschrieben, also wenn die variable 0 ist, dann schreibt es 0 in die datei, wen die variabe 1 ist, dann wird 1 hinengeschrieben usw.

    und dann hab ich noch einen fehler gemacht. es sollte heissen:

    GML-Quellcode

    1. file_text_writeln(f)


    MfG Alron
    also.. ich bekomme immer diese Fehlermeldung raus..

    Spoiler anzeigen

    ___________________________________________
    ERROR in
    action number 1
    of Mouse Event for Left Pressed
    for object obj_menu_main_save:

    Error opening file for writing.


    und das ist der Code den ich verwende...

    GML-Quellcode

    1. var f;
    2. f = file_text_open_write(get_integer('Name:','Save'))//Was genau ist Name: und Save? Name der Dateiname? und was ist dann Save? bitte um Hilfe :S
    3. file_text_write_real(f,global.scoore)
    4. file_text_writeln(f)
    5. file_text_write_real(f,global.playerchar)
    6. file_text_writeln(f)
    7. file_text_close(f)


    der code befindet sich im Left pressed event vom Save button.
  • oh sorry, ich dachte du wüsstest das.
    mit dem code kannst du sie speichern:

    GML-Quellcode

    1. registry_set_root(root verzeichnis)
    2. registry_write_string_ext ('registry schlüssel','name',global.unlock1)
    3. registry_write_string_ext ('registry schlüssel','name',global.unlock2)
    4. registry_write_string_ext ('registry schlüssel','name',global.unlock3)
    5. //usw


    und mit dem wieder laden:

    GML-Quellcode

    1. registry_set_root(root verzeichnis)
    2. global.unlock1=global.registry_read_string_ext(registry schlüssel,name)
    3. global.unlock2=global.registry_read_string_ext(registry schlüssel,name)
    4. global.unlock3=global.registry_read_string_ext(registry schlüssel,name)



    bei registry schlüssel musst du wie schon da steht den schlüssel angeben, z.b.:
    \Software\Microsoft\Windows\CurrentVersion\Explorer

    bei name musst du den ordner name von dem registry schlüssel angeben, z.b.:
    unlock3

    bei root verzeichnis musst du das root verzeichnis angeben.
    0 = HKEY_CURRENT_USER
    1 = HKEY_LOCAL_MACHINE
    2 = HKEY_CLASSES_ROOT
    3 = HKEY_USERS
    z.b. registry_set_root(0);


    das ergebnis in diesem fall wäre dann:
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\unlock3
  • -$Marvin$- schrieb:

    oh sorry, ich dachte du wüsstest das.
    mit dem code kannst du sie speichern:

    GML-Quellcode

    1. registry_set_root(root verzeichnis)
    2. registry_write_string_ext ('registry schlüssel','name',global.unlock1)
    3. registry_write_string_ext ('registry schlüssel','name',global.unlock2)
    4. registry_write_string_ext ('registry schlüssel','name',global.unlock3)
    5. //usw


    und mit dem wieder laden:

    GML-Quellcode

    1. registry_set_root(root verzeichnis)
    2. global.unlock1=global.registry_read_string_ext(registry schlüssel,name)
    3. global.unlock2=global.registry_read_string_ext(registry schlüssel,name)
    4. global.unlock3=global.registry_read_string_ext(registry schlüssel,name)



    bei registry schlüssel musst du wie schon da steht den schlüssel angeben, z.b.:
    \Software\Microsoft\Windows\CurrentVersion\Explorer

    bei name musst du den ordner name von dem registry schlüssel angeben, z.b.:
    unlock3

    bei root verzeichnis musst du das root verzeichnis angeben.
    0 = HKEY_CURRENT_USER
    1 = HKEY_LOCAL_MACHINE
    2 = HKEY_CLASSES_ROOT
    3 = HKEY_USERS
    z.b. registry_set_root(0);


    das ergebnis in diesem fall wäre dann:
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\unlock3
    ah okay, erscheint logisch... ty... aber auf diese Art kann man nicht mehrere Savegames machen oder? und löschen kann man die auch kaum oder?
  • doch kannst du du musst nur nochmal nach explorer nochmal verzeichnisse anlegen, in die du dann immer deine datein speicherst.
    Bsp:
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\savegame1\unlock3
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\savegame2\unlock3
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\savegame3\unlock3
    usw.

    und löschen geht nur teilweise. du kannst zwar die werte löschen aber nicht den schlüssel.
    die werte löschen kannst du so:

    GML-Quellcode

    1. registry_set_root(0)
    2. registry_write_string_ext('registry schlüssel','name','')
  • Ich würde das ganze mit einer ini machen und dann verschlüsseln.
    Hier meine Scripte(man braucht XorCrypt von Bl@ckSp@rk ist im Anhang):
    Speichern:
    Spoiler anzeigen

    GML-Quellcode

    1. name=get_string("Bitte Speicherungsname angeben!","")
    2. ini_open(string(name)+string('.ini'))
    3. //Beispiel:
    4. //Speichere in Geld den Wert von global.geld
    5. ini_write_real("Save","Geld",global.geld)
    6. ini_close()
    7. xor_encrypt_add(string(name)+string('.ini'))
    8. xor_encrypt_start(string(name)+string('.pak'))
    9. file_delete(string(name)+string('.ini'))
    Alles anzeigen


    Laden:
    Spoiler anzeigen

    GML-Quellcode

    1. name = get_string('Gebe deinen Speichernamen ein!','')
    2. if file_exists(string(name)+string('.pak')) then
    3. {
    4. xor_decrypt_all(string(name)+string('.pak'),".")
    5. ini_open(string(name)+string('.ini'))
    6. //Laden:
    7. //in global.geld den Wert von geld speichern
    8. global.geld = ini_read_real("Save","Geld",0)
    9. ini_close()
    10. file_delete(string(name)+string('.ini'))
    11. }
    12. else
    13. {
    14. show_message('Dieser Name existiert nicht!')
    15. }
    Alles anzeigen


    FG
    andre111
    Dateien
    • XorCrypt.zip

      (55,22 kB, 153 mal heruntergeladen, zuletzt: )
  • andre111 schrieb:

    Ich würde das ganze mit einer ini machen und dann verschlüsseln.
    Hier meine Scripte(man braucht XorCrypt von Bl@ckSp@rk ist im Anhang):
    Speichern:
    Spoiler anzeigen

    GML-Quellcode

    1. name=get_string("Bitte Speicherungsname angeben!","")
    2. ini_open(string(name)+string('.ini'))
    3. //Beispiel:
    4. //Speichere in Geld den Wert von global.geld
    5. ini_write_real("Save","Geld",global.geld)
    6. ini_close()
    7. xor_encrypt_add(string(name)+string('.ini'))
    8. xor_encrypt_start(string(name)+string('.pak'))
    9. file_delete(string(name)+string('.ini'))
    Alles anzeigen


    Laden:
    Spoiler anzeigen

    GML-Quellcode

    1. name = get_string('Gebe deinen Speichernamen ein!','')
    2. if file_exists(string(name)+string('.pak')) then
    3. {
    4. xor_decrypt_all(string(name)+string('.pak'),".")
    5. ini_open(string(name)+string('.ini'))
    6. //Laden:
    7. //in global.geld den Wert von geld speichern
    8. global.geld = ini_read_real("Save","Geld",0)
    9. ini_close()
    10. file_delete(string(name)+string('.ini'))
    11. }
    12. else
    13. {
    14. show_message('Dieser Name existiert nicht!')
    15. }
    Alles anzeigen


    FG
    andre111
    Also... bei der Speicher zeile

    GML-Quellcode

    1. xor_encrypt_add(string(name)+string('.ini'))
    2. xor_encrypt_start(string(name)+string('.pak'))
    3. file_delete(string(name)+string('.ini'))


    gibt der mir immer nen Fehler raus... also die erste zeile wird Rot gemarkert... die Datei ist im Game Maker verzeichnes unter Extensions.. liegt die da richtig?
  • andre111 schrieb:

    Aso ich hab vergessen, dass du die dll im selben verzeichniss des Spieles haben muss, und die Skripte(im Anhang importieren(ich hoffe du weist wie das geht) musst)
    Ah okay, jetzt hat der die auch in der Gmk drin.

    Ich teste es dann gleich mal und Editiere dann meinen Post :)
    Danke für die Hilfe =D

    MfG Marvin159

    EDIT://

    Malwieder ein Error ^^
    Spoiler anzeigen
    ___________________________________________
    ERROR in
    action number 1
    of Mouse Event for Left Pressed
    for object obj_menu_main_save:

    In script xor_encrypt_add:
    Error in code at line 3:
    // argument0 = filereturn external_call(global.dll_encrypt_add,argument0);
    ^
    at position 29: Unknown variable dll_encrypt_add

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

  • Und wenn man die Datei mit Editor öffnet und sie bearbeitet ist sie nicht mehr zu laden

    dann läuft da was falsch, denn man sollte sie nicht mehr editieren können.
    habe es gerade bei mir ausprobiert und das kann man die variablen auch noch laden. :pinch:

    @ all, könnte mir jemand bitte sagen wie ich die speicherungsdatei richtig verschlüssele
    (hab bis jetzt leider auch noch nie mit xorcrypt gearbeitet)
  • Benutzer online 1

    1 Besucher