HTTP Request mit GMS 2

HTTP Request mit GMS 2

Es gibt zahlreiche Fälle, in denen es im Spiel wichtig sein kann, Informationen aus dem Internet zu besorgen. Sei es eine aktuelle Versionsnummer für Updates, ein Spielername oder eine Highscoreliste. Dieses Tutorial liefert den Einstieg für die Schnittstelle zwischen GMS2 und PHP.

Anwendungsmöglichkeiten

Grundsätzlich gibt es, zumindest theoretisch, mehrere Wege Informationen aus dem Internet, oder konkret, aus einer Online-Datenbank, zu besorgen. Die Mischung zwischen Spiel und PHP hat aber einige Vorteile. Etwa den, dass das Spiel im Hintergrund nur eine PHP aufruft und nicht direkt auf die Datenbank zugreift. Das ist auf jeden Fall als sicherer einzustufen als mit dem Spiel, wenn auch verschlüsselt, die Daten zur Datenbankverbindung mitzuliefern.

Außerdem lässt sich so in einem Team auch die Arbeit ganz gut verteilen. Einer macht die Dinge im Spiel, der andere kümmert sich um die Online Sachen und man vereinbart kurz und knapp ein paar Regeln.

Mögliche Anwendungsbeispiele wären:

  • Online ist die aktuellste Version des Spiels bekannt. Dein Spiel schaut nach jedem Start, ob die Version online aktueller ist und das Spiel ggf. ein Update braucht.
  • Der Name des Spielers (und andere Werte) werden nur online gespeichert. Bei jedem Spielstart wird die ID übermittelt und die Informationen werden aus der Datenbank gelesen.
  • Online Highscoreliste
  • Tracking-Funktionen
  • Das Herunterladen von neuen Levels oder zumindest Informationen darüber

Die Aufgabe

Das Tutorial soll nur ein Einstieg in das Thema sein, ich möchte aber PHP und die eigentliche Datenbank behandeln. Das Ziel besteht darin, dass das Spiel einen Usernamen aus einer Datenbank abruft. Hierfür wird lediglich eine ID-Nummer übermittelt.

Darauf aufbauend lassen sich viele der oben genannten Möglichkeiten realisieren.

Die Datenbank

Ich hab auf meinem Server eine Testdatenbank mit der Tabelle test_user angelegt. In der Tabelle habe ich zwei User angelegt. Das Passwort und das Datum brauchen wir theoretisch nicht. Außerdem würden wir ein richtiges Passwort natürlich verschlüsseln.

Wer das Beispiel nachbauen will, kann folgenden SQL-Code verwenden:

PHP

config.inc.php

Zuerst legen wir eine Config-Datei an. In ihr speichern wir alles, was wir für die Verbindung zur Datenbank brauchen. Dann verbinden wir uns mit der Datenbank. Der Teil wird meistens in einer extra Datei abgelegt, ich möchte es hier nur etwas übersichtlicher halten.

Bei den Werten musst Du natürlich Name, Host, Username und Passwort Deiner eigenen Datenbank eintragen.

$con brauchen wir dann später um mit der Datenbank zu arbeiten.

get-username.php

Jetzt rufen wir die benötigten Informationen aus der Datenbank ab. $_GET sagt aus, dass die Datei mit einem Parameter aufgerufen werden muss.

Der Parameter lautet userid. Das Ergebnis kannst Du unter folgender URL anschauen: //bytegame.de/tutorials/gms-db-zugriff/get-username.php?userid=1

?userid=1 besagt, dass wir nach dem User mit der ID 1 suchen. Wenn kein User gefunden wird, wird error-0 zurückgegeben. Fehlt der Parameter komplett, erfolgt die Meldung „Falscher Parameter!“.

Nun zum GameMaker

Wir erstellen ein Objekt (bei mir heißt es obj_db_get_name) und legen es in den Raum. Nun brauchen wir folgende Events:

Create-Event

Hier sehen wir auch die URL und wie man die ID anheftet.

Async-HTTP-Event

Hier wird die Verbindung hergestellt und die Werte in userName gespeichert.

Jetzt geben wir es aus:

Draw-Event

Bereits im Create-Event haben wir die Variable global.httpLoading definiert. Für dieses Beispiel muss es nicht global sein, in einem größeren Spiel kann das aber durchaus sinnvoll sein. Sobald das Laden abgeschlossen ist, erfolgt die Ausgabe im Draw-Event. Wenn ein Name vorhanden ist, wird dieser angezeigt. Wenn nicht, erfolgt eine Fehlermeldung.

Anmerkungen

Sobald man Daten, und seien es nur ID-Nummern, durch das Internet schickt, sollte man auf erhöhte Sicherheit achten. Dafür ist das Beispiel nicht zwangsläufig das Beste. Es besteht immer die Gefahr, dass sich Witzbolde einen Sport daraus machen und versuchen, die Datenbank zu zerstören.

Das Grundprinzip ist aber im GameMaker nicht sonderlich schwer. Wenn man sich mit den Befehlen der asynchronen Funktionen befasst, entdeckt man zahlreiche Möglichkeiten, für die man früher noch DLLs benötigte.

 

Hat Dir dieser Artikel gefallen? Dann würden wir uns sehr über Unterstützung freuen.

Hinterlasse einen Kommentar

avatar
1024
  Abonnieren  
Benachrichtige mich bei