interner Online Highscore

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

    • interner Online Highscore

      Hinweis: Ein neues und flexibleres Online Highscore System von mir findest du hier: Online Highscore System

      Hallo zusammen!

      Ein Online Highscore ist schon eine feine Sache und kann ein Spiel schon enorm aufwerten. Die meisten GM Spiele rufen dazu einfach den Standardbrowser auf um den Highscore zu übertragen und anzuzeigen. Noch professioneller und komfortabler für den Anwender ist jedoch ein interner Online Highscore, der dann auch noch optisch passend im Spiel eingeblendet werden kann. In diesem Tutorial werde ich Schritt für Schritt erklären wie man sowas realisieren kann.

      Erstmal ein paar allgemeine Worte zur Funktionsweise. Ich werde die 39dll für die Socket Funktionen verwenden. Mit dieser wird eine TCP Verbindung zu dem Highscore Server aufgebaut und mit dem HTTP Protokoll findet der Datenaustausch statt. Es wird eine HTTP Anfrage an ein PHP Script gesendet welches dann den übertragenen Namen und Score auf dem Server speichert und die komplette Highscore Liste zurückliefert. Diese kann dann im Spiel entsprechend angezeigt werden. Ein Eintrag in der Highscoreliste wird in diesem Tutorial den Namen die Punkte und das Eintragsdatum enthalten.

      Damit du dieses Tutorial anwenden kannst solltest du über einen PHP fähigen Webspace verfügen. Datenbankunterstützung ist nicht erforderlich. Die erforderliche 39dll und eine md5 DLL von Defmaster liegen im Anhang bei.


      Servereinrichtung

      Fangen wir jetzt mit der serverseitigen Einrichtung an. Öffne die Datei "ohs.php" die sich im Anhang befindet mit einem Texteditor. Zeile 3-4 sehen so aus:

      Quellcode

      1. // Passwort für die Authentifizierung
      2. $passwd = "geheim";

      Das Wort "geheim" stellt dein Passwort dar. Das ist notwendig, damit niemand gefakte Punktzahlen eintragen kann. Ändere es in ein beliebiges Passwort deiner Wahl, je mehr Zeichen desto besser.

      In Zeile 110-113 steht noch folgendes:

      Quellcode

      1. // Parameter 1 : gibt auf oder absteigende Sortierung an (1 für absteigend, -1 für aufsteigend)
      2. // absteigend z.B. für Punkte, aufsteigend z.B. für Bestzeiten
      3. // Parameter 2 : maximale Einträge der Liste (z.B. 10 oder 100)
      4. highscore(1,15);

      Noch 2 Einstellungen für die Highscore Liste. Ihre Bedeutung ist im Kommentar erklärt.

      Das wars auch schon. Speicher die Datei und lade sie auf deinen Webspace.


      Einbinden in ein Projekt

      Jetzt kommen wir zum Mechanismus den wir in dein Spiel einbauen müssen. Öffne dein Projekt und importiere die Scripte "onlineHS.gml". Bevor du mit der Online Highscore arbeiten kannst musst du folgendes aufrufen:

      GML-Quellcode

      1. ohs_init();



      Highscore Liste runterladen

      Folgendes Script lädt den Online Highscore vom Server:

      GML-Quellcode

      1. hs = ds_list_create();
      2. ohs_load("blackspark.prism-network.de/ohs_tut/ohs.php","",-1,"","d.m.y, H:i",hs);

      Du musst also zunächst eine Datenstruktur anlegen und die Funktion ohs_load lädt dann die Liste in die Struktur. Zur Erklärung der Argumente: Das erste Argument ist die Url zum PHP Script welches du auf deinen Server geladen hast. Du brauchst in der Adresse kein "http://" und "www" anzugeben. Die nächsten 3 Argumente sind für das laden der Liste nicht wichtig. Sie sind erst für die Übertragung eines Highscores zum Server entscheident. Wichtig ist jetzt nur, dass Argument 2 die "-1" enthält. Das 5. Argument gibt das Datumsformat an. Die Regeln entsprechen dabei der Funktion date() aus der Sprache PHP. Eine genaue Beschreibung dazu findest du hier: de.php.net/manual/de/function.date.php
      Das letzte Argument ist dann die id auf die zuvor angelegte Datenstruktur.


      Highscore Liste zeichnen

      Als nächstes wollen wir die Liste zeichnen. Ein Script dafür kann z.B. so aussehen:

      GML-Quellcode

      1. var i, ds;
      2. draw_set_valign(fa_top);
      3. draw_set_font(font_normal);
      4. for (i = 0; i < ds_list_size(hs); i += 1) {
      5. ds = ds_list_find_value(hs,i);
      6. draw_set_halign(fa_left);
      7. draw_text(20,100+i*20,string(i+1)+". "+ds_list_find_value(ds,0));
      8. draw_set_halign(fa_center);
      9. draw_text(160,100+i*20,string(ds_list_find_value(ds,1)));
      10. draw_set_halign(fa_right);
      11. draw_text(300,100+i*20,ds_list_find_value(ds,2));
      12. }
      Alles anzeigen

      Dieses Script sollte verdeutlichen in welcher Ordnung die Highscore Liste gespeichert ist.


      Highscore an Server senden

      Zum Senden eines Scores musst du die gleiche Funktion verwenden wie zum einfachen runterladen, also ohs_load. Ein Script dafür sieht z.B. so aus:

      GML-Quellcode

      1. ohs_load("blackspark.prism-network.de/ohs_tut/ohs.php","name",123,"geheim","d.m.y, H:i",hs);

      Einige Argumente sind uns noch bekannt von oben und haben die gleiche Bedeutung. Neu sind nur die Argumente 2 bis 4. Argument 2 ist der Name für den neuen Eintrag, gefolgt vom Score und dem Passwort. Achte darauf das gleiche wie oben zu nehmen damit der Score auch vom Server angenommen wird.
      Mit diesem Aufruf wird nicht nur der neue Score übertragen sondern auch die Highscore Liste neu geladen und wieder in der Struktur hs abgelegt.

      Das wars auch schon, so einfach geht das.

      Die Tabelle zu Demozwecken, die lange Zeit auf meinem Server zur Verfügung stand, wurde aus Sicherheitsgründen entfernt!
      Werte wie Url zum Serverscript, Datumsformat und Passwort sind als Konstanten unter Global Game Settings zu finden und können leicht für eigene Zwecke geändert werden.

      Viel Spaß beim ausprobieren!

      Vielen Dank an die Entwickler der DLLs 39ster und Defmaster.

      Bei Fragen, Anregungen oder Fehlern bitte posten.

      Gruß BlackSpark

      EDIT 21.08.07
      Das PHP Script "show.php" wurde hinzugefügt. Dieses muss in den gleichen Ordner auf dem Webspace gelegt werden und zeigt bei Aufruf die Highscore Liste normal im Browser. z.B. sinnvoll, wenn der Highscore nicht nur im Spiel sondern auch auf der Homepage angezeigt werden soll.

      EDIT 22.08.07
      Fehler in "ohs.php" und "show.php" behoben, der entstand wenn man einen leeren Namen hochgeladen hat.

      EDIT 28.09.08
      Hinweis: Ein neues und flexibleres Online Highscore System von mir findest du hier: Online Highscore System
      Ich empfehle jedem das neue System statt diesem Tutorial zu verwenden!
      Dateien
      • ohs.rar

        (27,89 kB, 634 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Bl@ckSp@rk ()

    • Guten Tag, Bl@ckSp@rk!

      Hierbei muss Ich robin591wahrlich zustimmen, dieses Tutorial ist wirklich grandios!
      Es ist relativ einfach , und doch sehr hilfreich.:)
      Vielen Dank!;)

      Dein Lord Belail!
      Der Game Maker ist sehr gut!

      Ja, das ist ist er! Aber was noch? www.Tolle-Downloads.de natürlich! Höchste Qualität vollkommen kostenfrei! Meine Seite im weiten Web! Gleich aufrufen! Und bitte, bitte meldet euch in meinem Forum auf www.Tolle-Downloads.forendino.de an und lobigt die Seite eurer fanatischen Gelüste :D ! Wir sind nähmlich erst zwei Benutzer (mein Vater und Ich) .....

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

    • Es ist wirklich ein sehr schönes Tutorial.
      Dadurch, dass ich keine Ahnung von PHP und Co habe, hatte ich immer sehr große Probleme mit Online Highscores. Außerdem gab es meines Wissens nach bis jetzt kein Tutorial dieser Art, wo wirklich ein perfekt funktionierendes, anschauliches Example beiliegt. Es müssen nur die grundlegendsten Dinge in diesem Beispiel verändert werden, damit es wirklich funktioniert und ins eigene Spiel eingebaut werden kann.

      Ich kann dieses Tutorial wirklich jeden empfehlen, der halbwegs in GML eingewiesen ist!
      kostenlose Android-Spiele:
      hexavirScribble Triple

      Mr. Peperonico auf Facebook
    • Update: mit der beiliegenden "show.php" im Anhang des ersten posts kann man sich jetzt auch normal im Browser den online Highscore anzeigen lassen und nicht nur im Spiel. Nützlich vor allem zum Anzeigen der Liste auf seiner Homepage. Einfach in den gleichen Ordner auf den Webspace schieben. Viel Spaß damit!
    • Ich muss auch mal sagen, dass dieses Tut wirklich ein kleines Meisterwerk ist und sehr praktisch für grade die, die davon keine Ahnung haben ziemlich einfach ist. Ich hab genau das nämlich bei Scooter eingebaut und es läuft reibungslos, also an dieser Stelle auf nochmal danke ;)

      Was mich aber interessieren würde, ist wie man die Highscore um ein paar Elemente erweitert (Punkte, Zeit, erledigte Gegner, ...) ohne gleich einen extra Highscore zu machen.
    • Danke, freut mich, dass es euch so gut gefällt!

      Was die Individualität angeht, die copyboy angesprochen hat: Da hab ich auch schon länger drüber nachgedacht, und halte es für gut, wenn man eine Art Adminbereich hätte in dem man dann Highscore Listen anlegen könnte und für diese jegliche Einstellungen bezüglich Aufbau und Design treffen könnte. Allerdings ist das recht viel Aufwand und auch schwierig die Mitte zwischen möglichst viel Freiheit und Einfachheit zu finden. Aber eventuell werde ich das mal irgendwann fertig stellen und dann mit diesem Tutorial hier ersetzen. Bis dahin müsst ihr leider noch die Highscoreliste selber anpassen wenn ihr durch die Codes durchblickt. Bei Problemen dabei könnt ihr natürlich gerne hier fragen.
    • Perfekt, ausgezeichnet. Nur die Datei raufgeladen, die url geändert, und es funzt...sofort.
      Kann ich jeden empfehlen...das macht absolut keine Arbeit.
      Vielen Dank an Blackspark! :thumbsup: :thumbsup: :thumbsup: :thumbsup:
      PULSE

      Zweispieler [||||||||||]
      Einspieler [||||||||||]

      [Die Entgrater ist auf Eis gelegt]
    • Weisst du was mir noch gefallen würde ?

      Wenn man noch mehr Werte hochladen könnte, also beispielsweise "Level" oder "health" etc etc..... ich kämpfe mich gerade durch deinen Script, glaube aber nicht, dass ich das alleine hinbekommen werden.
      Ich fände es jedenfalls toll, wenn du erklären würdest wie und ob das geht, oder es einfach hinzufügst. Ansonsten top Sache !

      Merci

      ~t3mp3st
      Projekte:

      Interesse ? PM mir ;)
    • Danke, den Punkt mit den zusätzlichen Werten hat copyboy auch schon angesprochen und wie gesagt will ich das auch gerne umsetzen. Wenn ich mal Zeit und Lust dazu habe, werde ich das auch umsetzen. Wenn du selber Werte hinzufügen willst musst du einmal in der "ohs.php" die Funktion "highscore" entsprechend ändern und das Script "ohs_load". Ist eigentlich nicht so viel zu ändern. Schau dir einfach die Stellen an, an denen Name und Score verwendet werden.
    • schönes tut.....bei mir funktionierts nur irgendwie nicht......leider :(
      aber zum glück hab ich einen game_error.....
      Spoiler anzeigen
      ERROR in
      action number 1
      of Other Event: Game Start
      for object highscore:

      In script ohs_load:
      Error in code at line 1:
      // argument0 = url to online script
      // argument1 = name
      // argument2 = score (-1 for no)
      // argument3 = password
      // argument4 = date
      // argument5 = grid id
      // status values returned:
      // -1 : no connection to server
      // -2 : list received without adding an entry
      // -3 : failed to add score because of wrong key
      // -4 : successfully added the score

      var data, k, i, j, l, w, h, ds;

      for (i = 0; i < ds_list_size(argument5); i += 1)
      ds_list_destroy(ds_list_find_value(argument5,i));
      ds_list_clear(argument5);

      if (argument2 == -1)
      data = httpread(argument0+"?date="+ohs_url_escape(argument4));
      else
      data = httpread(argument0+"?name="+ohs_url_escape(argument1)+"&score="+string(argument2)+"&key="+md5(argument1+string(argument2)+argument3)+"&date="+ohs_url_escape(argument4));
      if (data == "")
      return -1;
      w = read_int(data,10,8);
      h = read_int(data,2,8);
      k = 18;
      for (j = 0; j < h; j += 1) {
      ds = ds_list_create();
      ds_list_add(argument5,ds);
      l = read_int(data,k,4);
      ds_list_add(ds,string_copy(data,k+4,l));
      k += 4+l;
      l = read_int(data,k,4);
      ds_list_add(ds,real(string_copy(data,k+4,l)));
      k += 4+l;
      l = read_int(data,k,4);
      ds_list_add(ds,string_copy(data,k+4,l));
      k += 4+l;
      }

      switch (read_int(data,1,1)) {
      case 0 : return -1;
      case 1 : return -3;
      case 2 : return -2;
      }

      at position 567: Wrong type of arguments to +.




      in meinem objekt siehts so aus:
      Spoiler anzeigen

      im create:

      GML-Quellcode

      1. ohs_init();
      2. hs = ds_list_create();
      3. ohs_load("johannes.gym.wenzgasse.at/blubber/ohs.php","",-1,"","d.m.y, H:i",hs);


      im draw:

      GML-Quellcode

      1. var i, ds;
      2. draw_set_valign(fa_top);
      3. draw_set_font(font_header);
      4. draw_set_halign(fa_center);
      5. draw_text(160,20,"<ENTER> drücken um#neuen Score hochzuladen");
      6. draw_text(60,70,"Name");
      7. draw_text(160,70,"Punkte");
      8. draw_text(260,70,"Datum");
      9. draw_set_font(font_normal);
      10. draw_line(20,90,300,90);
      11. for (i = 0; i < ds_list_size(hs); i += 1) {
      12. ds = ds_list_find_value(hs,i);
      13. draw_set_halign(fa_left);
      14. draw_text(20,100+i*20,string(i+1)+". "+ds_list_find_value(ds,0));
      15. draw_set_halign(fa_center);
      16. draw_text(160,100+i*20,string(ds_list_find_value(ds,1)));
      17. draw_set_halign(fa_right);
      18. draw_text(300,100+i*20,ds_list_find_value(ds,2));
      19. }
      Alles anzeigen


      im press enter:

      GML-Quellcode

      1. var name, sco;
      2. name = "";
      3. while (string_length(name) < 3 or string_length(name) > 16)
      4. name = get_string("Name (3 - 16 Zeichen) :",name);
      5. sco = -1;
      6. while (sco < 0 or sco > 1000000)
      7. sco = get_integer("Score (0 - 1000000) :",0);
      8. ohs_load("johannes.gym.wenzgasse.at/blubber/ohs.php","name",sco,"passwort","d.m.y, H:i",hs);



    • Probier mal auf deinem Server die Datei "score.data" zu löschen falls vorhanden. Ansonsten kann ich dir da nur schwer weiterhelfen, da ich dieses Tutorial schon vor ziemlich langer Zeit gemacht habe und nicht mehr weiterentwickel. Ich empfehle dir auch lieber mein Online Highscore System zu verwenden, dass ich vor kurzem entwickelt habe. Da hast du auch deutlich mehr Möglichkeiten deine Highscore-Tabelle einzustellen.