Neue probleme mit speichern! Help

  • GM 8

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

  • Neue probleme mit speichern! Help

    Hallo! Habe gesucht und leider nichts gefunden. Icha habe ne shopfunktion so gelöst:

    In object_buy

    Mouse left pressed event das hinzugefügt:

    if global.coins >= 1
    {
    global.coins -=1;
    instance_deactivate_object(obj_world2_close)
    instance_deactivate_object(obj_buy)
    instance_activate_object(obj_world2_open)
    scr_save_menu()
    scr_save()

    }


    Funktioniert soweit so gut. Der object ändert sich und die welt ist nach dem kauf offen. Aber wenn man ins menü wieder reinkommt dann ist die welt schon wieder geschlossen und man muss sie neu kaufen. Wie mache ich das das gespeichert wird nach dem kauf.

    Ich habe schon scripts erstellt scr_menu_save und scr_menu_load

    Scr_Menu_Save:

    var file; file = working_directory + '\MyGame'+'.ini'


    ini_open(file);

    ini_write_string("MyGame3","room", "room_menu");



    ini_close();


    Und Scr_menu_load:

    var file;
    file = working_directory + '\MyGame'+'.ini'

    if file_exists(file)
    {
    ini_open(file);

    ini_read_string("MyGame","room","" );

    ini_close();

    }
    else
    {
    scr_save_menu(); //öffne das skript save();
    scr_load_menu(); //öffne das skript load();
    }

    -----------------------------------------------

    Das klappt nicht. Mit real hatte ich auch schon probiert. Oder muss man das anders lösen?

    Bitte um hilfe!!!!! ?(
  • Sieht gut aus nur bei ini kannst du nur die Files da öffnen, die im Ordner von deinem Spiel sind und nicht im Temp.
    du könntest aber zum Laden einfach die ini zum Ordner kopieren und dann wieder zurück überschreiben und das im Ordner löschen.
    Speichern das selbe nur anders herum.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • husi012 schrieb:

    Sieht gut aus nur bei ini kannst du nur die Files da öffnen, die im Ordner von deinem Spiel sind und nicht im Temp.
    du könntest aber zum Laden einfach die ini zum Ordner kopieren und dann wieder zurück überschreiben und das im Ordner löschen.
    Speichern das selbe nur anders herum.


    kannst du mir das genauer erklären? versteh ich irgendwie nicht!
  • Ok hab ich mir gedacht
    Speichern:

    GML-Quellcode

    1. var file;
    2. file = working_directory + '\MyGame'+'.ini' ;
    3. file_copy(file,"save.ini");
    4. ini_open("save.ini");
    5. ini_write_string("MyGame3","room", "room_menu");
    6. ini_close();
    7. file_copy("save.ini",file);
    8. file_delete("save.ini");
    Alles anzeigen

    Laden:

    GML-Quellcode

    1. var file;
    2. file = working_directory + '\MyGame'+'.ini' ;
    3. if file_exists(file)
    4. file_copy(file,"save.ini");
    5. ini_open("save.ini");
    6. ini_write_string("MyGame3","room", "room_menu");
    7. ini_close();
    8. file_copy("save.ini",file);
    9. file_delete("save.ini");
    Alles anzeigen
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Hmm.. ich versteh dein System da jetzt nicht ganz. Du speicherst doch nicht wirklich was, bzw. beim Laden ignorierst du den Rückgabewert. Oder seh ich da jetzt was falsch? Erklär doch mal genauer was passieren sollte. Am besten anhand eines Beispieles :)
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Ich habe in meinem menu gleichzeitig die kauf funktion. Mit einem klick auf den kauf button wird das geld um 100 reduziert und die welt geht dann auf. Mann kommt auch rein, kann spielen, aber wenn man wieder zurück ins menu geht dann ist die welt wieder geschlossen. Und man muss die wieder kaufen. Und genau das will ich ändern. Das nach dem kauf der welt diese welt auch offen bleibt. Verstehst du?

    Könntest du mir einen code schreiben? Mit dem ich das hinkriege?
  • da fällt mir auf das bei speichern einfach nur "room_menu" müsste das nicht eine variable in diesem Fall sein?
    Ansonsten zeig mal wie du dann alles lädst und dann auch abspielst.

    PS: ach im Temp wird nach beenden des Spiels alles gelöscht was im Ordner ist.
    Du brauchst einen anderen Ordner.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • husi012 schrieb:

    da fällt mir auf das bei speichern einfach nur "room_menu" müsste das nicht eine variable in diesem Fall sein?
    Ansonsten zeig mal wie du dann alles lädst und dann auch abspielst.

    PS: ach im Temp wird nach beenden des Spiels alles gelöscht was im Ordner ist.
    Du brauchst einen anderen Ordner.


    Ok! Und wie mach ich das? Ich meine den ordner wechseln?

    Ich habe zumbeispiel mit der eingebauten speicher funktion versucht, es klappt sogar, bis auf den teil das das geld dann immer wieder neu geladen wird und ich immer die selbe anzahl an geld habe.

    Laden tuhe ich im obj_menu_controller im create event und das speichern beim drücken auf den button buy.
  • Ach mist jetzt habe ich working_directiory mit temp_directory verwechselt.
    Zeig einfach mal wo du dann alles lädst und den Code im object womit du dann alles mit kaufen machst.
    Da könnte ein Fehler sein.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Also ich denke, dass du mehrere Welten hast, die man kaufen kann. Ich würde dass dann mit der ini so lösen, das ich für jede Welt einen Eintrag schreibe, welcher den Wert true oder false haben kann.

    Quellcode

    1. [worlds]
    2. world1=false
    3. world2=false
    4. world3=true
    5. world4=true
    6. world5=false
    7. world6=true
    8. ..
    9. ..
    10. ..


    Beim einlesen würd ich dann die Welten überprüfen, welche spielbar sind und nicht. Beim klicken auf den Kaufen-Knopf, wird die Ini dann geändert. Oder versteh ich da jetzt noch immer was falsch?
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Rodrog schrieb:

    Also ich denke, dass du mehrere Welten hast, die man kaufen kann. Ich würde dass dann mit der ini so lösen, das ich für jede Welt einen Eintrag schreibe, welcher den Wert true oder false haben kann.

    Quellcode

    1. [worlds]
    2. world1=false
    3. world2=false
    4. world3=true
    5. world4=true
    6. world5=false
    7. world6=true
    8. ..
    9. ..
    10. ..


    Beim einlesen würd ich dann die Welten überprüfen, welche spielbar sind und nicht. Beim klicken auf den Kaufen-Knopf, wird die Ini dann geändert. Oder versteh ich da jetzt noch immer was falsch?



    Du verstehst es richtig! Aber könntest du mir den save und load code schreiben? Bitte))

    Husi012:

    Mit welten kauf habe ich das so geregelt: im button "kaufen" habe ich diesen code:
    if global.coins >= 10
    {
    global.coins -=10;
    instance_deactivate_object(obj_world2_close)
    instance_deactivate_object(obj_buy)
    instance_activate_object(obj_world2_open)
    scr_save_menu()
    scr_save()

    }

    Speichern tuhe ich auch bei dem button.

    Laden tuhe ich über menu_controller im create event!

    Kann man da was machen?
  • Ach der Code war das.
    Was ich da bemerkt habe ist das du das obj_buy deaktivierst und dann kann sich das nicht mehr aktivieren oder etwas speichern. Also ich würde das instance_deactivate_object(obj_buy) raus machen.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • So da ich jetzt 10 Minunten mal zeit habe, schreib ich jetzt schnell aus dem Kopf, wie ich das machen würde.

    Beim Starten des Raumes/Spieles muss mal überprüft werden, ob das Spiel schonmal gespielt wurde, und ein Speicherstand überhaupt existiert

    GML-Quellcode

    1. file_name = "save.ini";
    2. if(!file_exists(file_name)) {
    3. //1. Mal das Spiel gestartet
    4. file = ini_open(file_name);
    5. ini_write_string("worlds", "world0", "false");
    6. ini_write_string("worlds", "world1", "false");
    7. ini_write_string("worlds", "world2", "false");
    8. ini_write_string("worlds", "world3", "false");
    9. ini_write_string("worlds", "world4", "false");
    10. ini_close();
    11. }
    Alles anzeigen


    Danach sieht die Datei so aus:

    Quellcode

    1. [worlds]
    2. world0=false
    3. world1=false
    4. world2=false
    5. world3=false
    6. world4=false


    Egal wo der Code ist, auf alle Fälle muss er vor allen anderen ausgeführt werden. Jetzt schreiben wir uns ein schönes Scriptchen, welches überprüft, ob ein Welt gekauft wurde.

    scr_check_world

    GML-Quellcode

    1. var file_name, file, check;
    2. file_name = "save.ini";
    3. file = ini_open(file_name);
    4. check = ini_read_string("worlds", "world"+argument0, "false");
    5. ini_close();
    6. return check == "true";

    Diesen führst du dann aus, um zu überprüfen ob eine Welt gekauft wurde. Zum Beispiel so:

    GML-Quellcode

    1. if(scr_check_world(0)) {
    2. show_message("Welt 0 wurde gekauft");
    3. } else {
    4. show_message("Welt 0 wurde noch nicht gekauft");
    5. }



    Nun noch ein Script, mit welchen du eine Welt kaufen kannst. So würde dieser aussehen:

    scr_buy_world

    GML-Quellcode

    1. var file_name, file;
    2. file_name = "save.ini";
    3. file = ini_open(file_name);
    4. ini_write_string("worlds", "world"+string(argument0), "true");
    5. ini_close();


    Ausführen kannst du das dann so:

    GML-Quellcode

    1. scr_buy_world(0);


    Und fertig.


    _________________________
    Gesamtbeispiel:

    GML-Quellcode

    1. file_name = "save.ini";
    2. if(!file_exists(file_name)) {
    3. //1. Mal das Spiel gestartet
    4. file = ini_open(file_name);
    5. ini_write_string("worlds", "world0", "false");
    6. ini_write_string("worlds", "world1", "false");
    7. ini_write_string("worlds", "world2", "false");
    8. ini_write_string("worlds", "world3", "false");
    9. ini_write_string("worlds", "world4", "false");
    10. ini_close();
    11. }
    12. if(scr_check_world(0)) {
    13. show_message("Welt 0 wurde gekauft");
    14. } else {
    15. show_message("Welt 0 wurde noch nicht gekauft");
    16. }
    17. scr_buy_world(0);
    18. if(scr_check_world(0)) {
    19. show_message("Welt 0 wurde gekauft");
    20. } else {
    21. show_message("Welt 0 wurde noch nicht gekauft");
    22. }
    Alles anzeigen
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.