Highscore++

    • Skript

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

    • Highscore++

      Highscore++


      Ich habe das hier vor einiger Zeit mal angefangen und heute endlich mal zu Ende gebracht.
      Highscore++ ist ein eigenes Highscore-System, basierend auf den ds_grid Funktionen.
      Ich hab es geschrieben, weil ich das interne Highscore-System doch sehr mager fand und die Frage, wie man mehrere Highscores machen kann auch hin und wieder mal kam.

      Hier mal ein paar Features:
      • Beliebig viele Highscores
      • Beliebige Spalten und Zeilenanzahl
      • Einfacher Zugriff auf die Einträge
      • Speichern in/Laden aus Dateien + (einfache) Verschlüsselung
      • Grundfunktionen (add, insert, remove, ...)
      • Kann z.B. auch für Tabellen verwendet werden

      Zu der Verwendung und den Funktionen werde ich hier jetzt nichts schreiben, das steht alles in der beigelegten pdf Datei.
      Neben der pdf ist noch eine Beispiel gmk und die Skriptdatei enthalten.

      Highscore++.zip
    • Tolle Sache! :thumbup: Bin gerade dabei mit dem Studio mehrere Highscores in einem Spiel einzubauen. Da erscheint mir diese Lösung super! Habe die Demo ins Studio importiert nun gibt es ein Problem beim Speichern ?(

      GML-Quellcode

      1. hs_save(hs, "highscore.txt", 5);
      Siehe folgende Fehlermeldung:
      ############################################################################################
      FATAL ERROR in
      action number 1
      of Key Press Event for S-key Key
      for object main:

      illegal access of argument, argument is not provided to script
      at gml_Script_hs_save (line 11) - for (yy=0; yy < ds_grid_height(argument); yy+=1)
      ############################################################################################
      --------------------------------------------------------------------------------------------
      stack frame is
      gml_Script_hs_save (line 11)
      called from - gml_Object_main_KeyPressed_S_1 (line 1) - hs_save(hs, "highscore.txt", 5);
      Alle anderen Funktionen scheinen aber im Studio zu funktionieren, sogar die gespeicherte highscore.txt wird mit "L" richtig geladen.

      Vielleicht muss ich beim Script eine Kleinigkeit abändern, nur finde ich keinen Syntax-Fehler, so bin ich am Probieren.
      Möglicherweise gibt es dafür eine einfache Lösung. Es wäre super!

      MfG. Hubsl

      Nun habe ich den Fehler gefunden: In den Scripts steht manchmal (argument) anstatt (argument0) Beispiel Script-Liste löschen neu

      GML-Quellcode

      1. //Leert sie Highscore
      2. //argument0: Highscore
      3. ds_grid_resize(argument0, ds_grid_width(argument0), 1);
      Script-Liste löschen alt

      GML-Quellcode

      1. //Leert sie Highscore
      2. //argument0: Highscore
      3. ds_grid_resize(argument0, ds_grid_width(argument), 1);


      Ich finde diese Methode zum erstellen mehrerer highscores sehr praktisch.
      Ein großes Dankeschön an -$Marvin$- für diesen Beitrag

      MfG. Hubsl

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hubsl () aus folgendem Grund: Fehler gefunden

    • Nun habe ich diesen highscore++ in das GM Studio2 importiert. Alles soweit in Ordnung.
      Leider funktioniert die Funktion "hs_sort" nicht. ?( es kommt der Fehler: "REAL argument is undefined at gml_Script_hs_sort (line 17 if (real(ds_grid_get(argument0, col, ii)) > real(ds_grid_get(argument0, col, ii+1)))"

      Hier meine verwendeten Codes:
      Im Create

      GML-Quellcode

      1. hs01 = hs_create_highscore("Name|Punkte");//Highscore erstellenif file_exists("high01.txt") hs01 = hs_load("high01.txt", 5);//Laden HS-TXT-File,(5 = verschlüsselt 0 = unverschlüsselt)global.h_date = (string(global.name) + "|" + string(global.punkte));//Name und Punkte für neuen Eintraghs_add(hs01, global.h_date);//Eintrag hinzufügenhs_sort(hs01, "Punkte", true);//Sortieren nach Punkten, absteigendhs_save(hs01,"high01.txt", 5);//Speichern HS-TXT-File,(5 = verschlüsselt 0 = unverschlüsselt)


      Interessanterweise funktioniert "hs_sort", wenn ich bei "hs_add" die Daten direkt eingebe:

      GML-Quellcode

      1. hs_add(hs01, "Spieler2|77");


      Vielleicht hat jemand eine Idee, wie ich das hinkriegen könnte, denn ohne sortieren hat der highscore keinen Sinn.

      MfG. Hubsl
    • Schön zu sehen, dass nach 8 Jahren trotzdem noch jemand Verwendung für mein Highscore Script findet :)

      Einfach mal ins Blaue geraten:
      - Der String den du erzeugst, sieht vielleicht nicht so aus, wie du denkst. Hast du ihn mal ausgegeben und geschaut, ob er korrekt ist?
      - Die "high01.txt" Highscore hat vielleicht eine andere Struktur als du erwartest, was zu Fehlern führt.

      Da dein Beispiel sehr normal aussieht und es offenbar funktioniert, wenn du den String hardcodest, gehe ich stark davon aus, dass der Fehler auf deiner Seite liegt.
      Entweder das, oder GMS 2 hat irgendwas geändert. Da ich das ganze aber damals für den GM8 geschrieben habe und weder GMS 1 noch 2 besitze, kann ich dir da leider nicht weiterhelfen.


      Im Übrigen solltest du darauf achten deinen Code anständig zu formatieren. Sowas motiviert nicht gerade sich das Problem anzuschauen.
    • Danke für die rasche Antwort. :thumbup: Ja die Jahre verfliegen relativ rasch.

      Werde beim nächsten mal den GML-Code richtig formatieren, war etwas zu schnell beim Absenden.

      Übrigens, mit GM8 und mit GM Studio1 funktioniert alles bestens. :thumbsup: highscore++ ist eine tolle Sache.
      Nur beim Studio 2gab es eben das Problem mit dem Skript hs_sort.
      Das Problem konnte behoben werden, indem die Skripte im GM Studio 2 nochmals genau kontrolliert und korrigiert wurden.
      Beim Import vom Studio1 ins Studio2 haben sich ein paar Zeichen verändert gehabt. Nun klappt alles bestens auch mit GM Studio2.

      Hier die aktuellen Eintragungen:

      Im Create:

      GML-Quellcode

      1. global.h_date = (string(global.name) + "|" + string(global.punkte)); //String von Name und Punkte für hs_add
      2. hs01 = hs_create_highscore("Name|Punkte"); //Highscore erstellen
      3. if file_exists("high01.txt") hs01 = hs_load("high01.txt", 5); //Laden des Text-Files falls vorhanden, verschlüsselt
      4. hs_add(hs01, global.h_date); //Eintrag hinzufügen
      5. hs_sort(hs01, "Punkte", false); //Sortieren nach Punkten, absteigend
      6. hs_save(hs01,"high01.txt", 5); //Speichern HS-TXT-File, verschlüsselt


      Im Draw:

      GML-Quellcode

      1. draw_roundrect_color(330,60,room_width-330,room_height-100,c_ltgray,c_ltgray,false)//grauer Hintergrund
      2. draw_set_font(Calibri24)
      3. draw_set_color(c_dkgray)
      4. draw_set_halign(fa_center)
      5. draw_text(640,65,"Bestenliste");
      6. draw_set_halign(fa_left)
      7. draw_set_font(Calibri18)
      8. hs_draw(hs01, 460, 100, 16, false, 190, 2)//HS,x,y,Anzahl der Einträge,mit Nummerierung,Spaltenabstand,Zeilenabstand

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