Hallo Community!
Ich habe schon von einigen den Wunsch gehört, eine Art Masterserver in ihr Multiplayerspiel integrieren zu können. Also eine zentrale Stelle, an der alle offenen Sessions eines Onlinespiels registriert werden, damit andere Spieler diese Liste abrufen können um einem Spiel beitreten zu können, ohne die IP des Hosts zu kennen. Denn zum einen kann es auf Dauer nerven, immer erst seine IP weitergeben zu müssen damit andere in sein Spiel eintreten können und zum anderen können auf diese Weise auch Leute miteinander spielen, die sich nicht mal direkt kennen müssen.
Deshalb will ich an dieser Stelle einmal ein Tutorial für solch einen Masterserver bereitstellen. Vorneweg möchte ich anmerken, dass das hier erklärte Vorgehen auf PHP basiert und ein Masterserver oft besser durch ein Programm umzusetzen ist, welches auf dem Server arbeitet und über das auch alle Spiele direkt laufen. Allerdings haben die Wenigsten einen dafür fähigen Server zur Verfügung. Bei der Methode, die ich hier vorstellen will, arbeitet der Masterserver eher als Vermittler von IPs über den die Spiele also nicht direkt laufen.
Das Ganze soll wie folgt funktionieren: Auf einem PHP-fähigen Webspace wird eine Liste mit allen Sessions in einer Datei gespeichert. Per Anfrage kann ein Spieler diese Liste Abrufen oder gar selber seine Session registrieren, die dann in die Liste auf dem Webspace aufgenommen wird und somit für andere sichtbar ist. Eine Session auf dem Webspace besteht immer aus der IP-Adresse des Hosts und zusätzlichen Informationen, wie z.B. Name der Session und maximale Anzahl an Spielern. Ein Spieler, der nun einer Session beitreten will, ruft einfach die Liste ab, sucht sich davon eine Session aus und das Spiel kann sich über die bekannte IP mit dem Host verbinden.
Alle benötigten Dateien findest du unten im Dateianhang. Zum testen kannst du einfach mal die "example.gm6" starten. Im Programm kannst du mit den entsprechenden Tasten, die du rechts siehst, eine neue Session erstellen, die Liste manuelle neu laden, oder deine Session löschen. Die Liste wird auch automatisch alle 30 Sekunden neu geladen. Wenn du Glück hast verwendet jemand anders auch dieses example im Moment und du kannst seinen Eintrag und seine IP-Adresse in der Liste sehen.
Um nun deinen Masterserver einzurichten musst du nur die Datei "server.php" auf deinen Webspace laden. Mehr Dateien sind nicht nötig, es wird lediglich noch eine "server.dat" Datei im gleichen Ordner erstellt um die Liste der Sessions zu speichern. In den Ordner deines Spiels musst du dann die "server.dll" legen, die für die Kommunikation mit dem Masterserver zuständig ist. Die Datei "server.gml" enthält alle Scripts für die DLL. Diese findest du auch in der Datei "example.gm6". In jedem Script findest du auch dessen Erklärung.
Anhand des examples lässt sich das Vorgehen im GM schon gut erkennen. Dennoch hier eine kurze Anleitung was zu tun ist.
Zu Spielbeginn solltest du folgendes aufrufen:
Die Adresse zu deinem Server solltest du oben noch entsprechend ändern. Um die Liste mit den Sessions abzurufen brauchst du folgende Funktion:
Die Funktion gibt zudem zurück, ob das Abrufen erfolgreich war. Je nach dem könntest du an dieser Stelle eine Meldung ausgeben. Wenn ein Spieler eine neue Session startet kannst du ihn wie folgt auf deinem Masterserver registrieren, damit sich andere mit ihm verbinden können:
Mit server_data_add legst du also zusätzliche Informationen fest, die andere, die sich die Liste vom Masterserver holen, anzeigen können. Wie schon oben erwähnt ist es sinnvoll zumindest der Session einen Namen zu geben und diesen zu übertragen. Aber auch beliebige andere Daten können noch zusätzlich übertragen werden, je nachdem was für das Spiel noch wichtig ist. Beachte auch die Reihenfolge, in der du die Daten mit server_data_add hinzufügst. Zum Abrufen der Daten wird später eine Nummer benutzt wobei 0 für den ersten Wert steht. Beachte auch, dass alle Werte als Zeichenkette übergeben werden müssen. Falls du also eine Zahl übertragen willst musst du die Funktion string benutzen. Wie schon bei server_refresh gibt auch server_submit zurück, ob der Vorgang erfolgreich ausgeführt wurde und lädt die Liste neu. server_submit dient außerdem dem Ändern von Daten, falls du bereits auf dem Masterserver registriert bist.
Beachte, dass in der "server.php" als Schutz eine Obergrenze für die Größe der zusätzlichen Daten existiert. Standardmäßig ist hier 1024 eingestellt. Du findest den Wert in Zeile 119. Jedoch sollte der Standardwert mehr als ausreichend sein, sodass du nur in sehr seltenen Fällen einen größeren Wert einstellen musst.
Wie du an den Inhalt der abgerufenen Liste gelangst, findest du in den Erklärungen der entsprechenden Scripte und natürlich im example.
Wenn ein Spieler seine Session beendet soll diese natürlich auch vom Masterserver gelöscht werden. Dazu gibt es folgende Funktion:
Auch diese Funktion gibt wieder zurück, ob der Vorgang erfolgreich war.
Natürlich kann es passieren, dass ein Spiel mal abstürzt, oder auf andere Weise ungewöhnlich beendet wird. Damit das allerdings nicht zur Folge hat, dass obige Funktion nicht aufgerufen würde und die IP des Spielers für immer auf dem Masterserver verbleiben würde, gibt es ein sogenanntes Timeout. Wenn der Masterserver länger als dieses Timeout keine Rückmeldung vom Spieler per server_refresh oder server_submit erhält, wird er automatisch aus der Liste gelöscht. Deshalb sollte in regelmäßigen Abständen, kleiner als das Timeout eine der beiden Funktionen aufgerufen werden. Im example ist es das Alarm-Event, das diese Aufgabe durchführt. Mit folgender Funktion wird das Timeout in Sekunden festgelegt:
Voreingestellt ist 60. Das Timeout wird beim nächsten Aufruf von server_submit übertragen und gilt auch nur für diese Session.
In der "server.php" ist ein Maximum für das Timeout von einer Stunde festgelegt. In Zeile 121 kannst du es ändern.
Das wars auch schon!
Nun viel Spaß damit und ich hoffe ihr kommt zurecht. Bei Unklarheiten könnt ihr gerne Fragen!
Gruß BlackSpark.
Ich habe schon von einigen den Wunsch gehört, eine Art Masterserver in ihr Multiplayerspiel integrieren zu können. Also eine zentrale Stelle, an der alle offenen Sessions eines Onlinespiels registriert werden, damit andere Spieler diese Liste abrufen können um einem Spiel beitreten zu können, ohne die IP des Hosts zu kennen. Denn zum einen kann es auf Dauer nerven, immer erst seine IP weitergeben zu müssen damit andere in sein Spiel eintreten können und zum anderen können auf diese Weise auch Leute miteinander spielen, die sich nicht mal direkt kennen müssen.
Deshalb will ich an dieser Stelle einmal ein Tutorial für solch einen Masterserver bereitstellen. Vorneweg möchte ich anmerken, dass das hier erklärte Vorgehen auf PHP basiert und ein Masterserver oft besser durch ein Programm umzusetzen ist, welches auf dem Server arbeitet und über das auch alle Spiele direkt laufen. Allerdings haben die Wenigsten einen dafür fähigen Server zur Verfügung. Bei der Methode, die ich hier vorstellen will, arbeitet der Masterserver eher als Vermittler von IPs über den die Spiele also nicht direkt laufen.
Das Ganze soll wie folgt funktionieren: Auf einem PHP-fähigen Webspace wird eine Liste mit allen Sessions in einer Datei gespeichert. Per Anfrage kann ein Spieler diese Liste Abrufen oder gar selber seine Session registrieren, die dann in die Liste auf dem Webspace aufgenommen wird und somit für andere sichtbar ist. Eine Session auf dem Webspace besteht immer aus der IP-Adresse des Hosts und zusätzlichen Informationen, wie z.B. Name der Session und maximale Anzahl an Spielern. Ein Spieler, der nun einer Session beitreten will, ruft einfach die Liste ab, sucht sich davon eine Session aus und das Spiel kann sich über die bekannte IP mit dem Host verbinden.
Alle benötigten Dateien findest du unten im Dateianhang. Zum testen kannst du einfach mal die "example.gm6" starten. Im Programm kannst du mit den entsprechenden Tasten, die du rechts siehst, eine neue Session erstellen, die Liste manuelle neu laden, oder deine Session löschen. Die Liste wird auch automatisch alle 30 Sekunden neu geladen. Wenn du Glück hast verwendet jemand anders auch dieses example im Moment und du kannst seinen Eintrag und seine IP-Adresse in der Liste sehen.
Um nun deinen Masterserver einzurichten musst du nur die Datei "server.php" auf deinen Webspace laden. Mehr Dateien sind nicht nötig, es wird lediglich noch eine "server.dat" Datei im gleichen Ordner erstellt um die Liste der Sessions zu speichern. In den Ordner deines Spiels musst du dann die "server.dll" legen, die für die Kommunikation mit dem Masterserver zuständig ist. Die Datei "server.gml" enthält alle Scripts für die DLL. Diese findest du auch in der Datei "example.gm6". In jedem Script findest du auch dessen Erklärung.
Anhand des examples lässt sich das Vorgehen im GM schon gut erkennen. Dennoch hier eine kurze Anleitung was zu tun ist.
Zu Spielbeginn solltest du folgendes aufrufen:
Die Adresse zu deinem Server solltest du oben noch entsprechend ändern. Um die Liste mit den Sessions abzurufen brauchst du folgende Funktion:
Die Funktion gibt zudem zurück, ob das Abrufen erfolgreich war. Je nach dem könntest du an dieser Stelle eine Meldung ausgeben. Wenn ein Spieler eine neue Session startet kannst du ihn wie folgt auf deinem Masterserver registrieren, damit sich andere mit ihm verbinden können:
Mit server_data_add legst du also zusätzliche Informationen fest, die andere, die sich die Liste vom Masterserver holen, anzeigen können. Wie schon oben erwähnt ist es sinnvoll zumindest der Session einen Namen zu geben und diesen zu übertragen. Aber auch beliebige andere Daten können noch zusätzlich übertragen werden, je nachdem was für das Spiel noch wichtig ist. Beachte auch die Reihenfolge, in der du die Daten mit server_data_add hinzufügst. Zum Abrufen der Daten wird später eine Nummer benutzt wobei 0 für den ersten Wert steht. Beachte auch, dass alle Werte als Zeichenkette übergeben werden müssen. Falls du also eine Zahl übertragen willst musst du die Funktion string benutzen. Wie schon bei server_refresh gibt auch server_submit zurück, ob der Vorgang erfolgreich ausgeführt wurde und lädt die Liste neu. server_submit dient außerdem dem Ändern von Daten, falls du bereits auf dem Masterserver registriert bist.
Beachte, dass in der "server.php" als Schutz eine Obergrenze für die Größe der zusätzlichen Daten existiert. Standardmäßig ist hier 1024 eingestellt. Du findest den Wert in Zeile 119. Jedoch sollte der Standardwert mehr als ausreichend sein, sodass du nur in sehr seltenen Fällen einen größeren Wert einstellen musst.
Wie du an den Inhalt der abgerufenen Liste gelangst, findest du in den Erklärungen der entsprechenden Scripte und natürlich im example.
Wenn ein Spieler seine Session beendet soll diese natürlich auch vom Masterserver gelöscht werden. Dazu gibt es folgende Funktion:
Auch diese Funktion gibt wieder zurück, ob der Vorgang erfolgreich war.
Natürlich kann es passieren, dass ein Spiel mal abstürzt, oder auf andere Weise ungewöhnlich beendet wird. Damit das allerdings nicht zur Folge hat, dass obige Funktion nicht aufgerufen würde und die IP des Spielers für immer auf dem Masterserver verbleiben würde, gibt es ein sogenanntes Timeout. Wenn der Masterserver länger als dieses Timeout keine Rückmeldung vom Spieler per server_refresh oder server_submit erhält, wird er automatisch aus der Liste gelöscht. Deshalb sollte in regelmäßigen Abständen, kleiner als das Timeout eine der beiden Funktionen aufgerufen werden. Im example ist es das Alarm-Event, das diese Aufgabe durchführt. Mit folgender Funktion wird das Timeout in Sekunden festgelegt:
Voreingestellt ist 60. Das Timeout wird beim nächsten Aufruf von server_submit übertragen und gilt auch nur für diese Session.
In der "server.php" ist ein Maximum für das Timeout von einer Stunde festgelegt. In Zeile 121 kannst du es ändern.
Das wars auch schon!
Nun viel Spaß damit und ich hoffe ihr kommt zurecht. Bei Unklarheiten könnt ihr gerne Fragen!
Gruß BlackSpark.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bl@ckSp@rk ()