Ich habe das beigelegte Script, welches im 39dll-Tutorial enthalten ist ein bisschen vereinfacht sowie leicht verbessert. Unter anderem wird das Spiel nicht angehalten, während die IP ermittelt wird.
Das Script sieht folgendermaßen aus:
Alles anzeigen
Dieser Script verlangt natürlich ein ausführen im Step Event. Ganz einfach wäre das zb mit:
Alles anzeigen
So wird der Skript auch nur ausgeführt, solange die Anfrage dauert, oder bis ein Fehler auftritt.
Zusatz:
Spoiler anzeigen
Das Script sieht folgendermaßen aus:
GML-Quellcode
- // getip()
- var lineend,header,first,val,size;
- // Definiere das Zeichen für einen Zeilenumbruch
- lineend=chr(13)+chr(10);
- //Stelle eine Verbindung zum Server her, falls das noch nicht erfolgt ist.
- if !(variable_local_exists('_getip'))
- {
- _getip=tcpconnect("masterxy.bplaced.net",80,2);
- _send=0;
- }
- // Folgende 2 Abfragen überprüfen den Status der Verbindung. Befindet man sich noch im Verbindungsaufbau, wird '' zurückgegeben.
- if(!_getip)
- return "Error!";
- if !(tcpconnected(_getip))
- return '';
- // Sendet die Anfrage, falls noch nicht geschehen. Hier wird in den Textmodus geschaltet
- // und eine Abfrage mittels GET an eine Datei des Servers gestartet.
- if (_send=0)
- {
- setformat(_getip, 1, lineend);
- clearbuffer();
- writechars("GET /getip.php HTTP/1.0" +lineend);
- writechars("Host: masterxy.bplaced.net" +lineend);
- sendmessage(_getip);
- _send=1;
- }
- // Empfange den Header der Datei - in den meisten Fällen nicht gebraucht.
- // Erst nach Empfang des Headers wird der Rest der Datei empfangen, also im Prinzip, das was in ihr drinsteht.
- setformat(_getip,1,lineend);
- header = true;
- while(header)
- {
- receivemessage(_getip);
- first = readsep(" ");
- switch(first)
- {
- case "":
- header = false;
- break;
- }
- }
- setformat(_getip,2);
- val = "";
- // Hier wird der Inhalt empfangen
- while(1)
- {
- size=receivemessage(_getip,6000);
- if(size>0)
- val+=readchars(size);
- else break;
- }
- // Wird kein Inhalt mehr empfangen, kann die Verbindung geschlossen werden.
- if (val!='')
- closesocket(_getip);
- // Gibt die IP aus. Sollte der string eine IP unübliche Länge haben, wird Error ausgegeben.
- if (string_length(val)<=15)
- return val;
- else
- return 'Error!';
Dieser Script verlangt natürlich ein ausführen im Step Event. Ganz einfach wäre das zb mit:
GML-Quellcode
So wird der Skript auch nur ausgeführt, solange die Anfrage dauert, oder bis ein Fehler auftritt.
Zusatz:
Im Skript stelle ich eine Verbindung zu meinem Server her. Um die IP zu ermitteln, indem ihr euren eigenen Server benutzt, braucht ihr eigentlich nur eine php-Datei, die die IP des Benutzers ausgibt:
Wenn ihr diese Datei dann vom Skript aus ansprecht, solltet ihr die IP erhalten. Alternativ kann man aber auch zu whatismyip.org verbinden, die Seite macht genau das gleiche.
Abschließender Hinweis: Auf diese Weise lassen sich natürlich alle Arten von Daten empfangen. Man könnte zb in der php-Datei noch Abfragen einbauen, welcher Wert ausgegeben werden soll.
Wenn ihr diese Datei dann vom Skript aus ansprecht, solltet ihr die IP erhalten. Alternativ kann man aber auch zu whatismyip.org verbinden, die Seite macht genau das gleiche.
Abschließender Hinweis: Auf diese Weise lassen sich natürlich alle Arten von Daten empfangen. Man könnte zb in der php-Datei noch Abfragen einbauen, welcher Wert ausgegeben werden soll.

© 2008 by Teamgrill Productions
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von MasterXY ()